/* eslint-disable */
var LeaderLine = function() {
  "use strict";
  var Z, w, O, M, I, o, t, s, h, u, n, a, e, _, v, l, r, i, E, x, p, c, d, C = "leader-line",
  b = 1,
  k = 2,
  L = 3,
  A = 4,
  V = {
      top: b,
      right: k,
      bottom: L,
      left: A
  },
  P = 1,
  N = 2,
  T = 3,
  W = 4,
  B = 5,
  R = {
      straight: P,
      arc: N,
      fluid: T,
      magnet: W,
      grid: B
  },
  Y = "behind",
  f = C + "-defs",
  y = '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" id="leader-line-defs"><style><![CDATA[.leader-line{position:absolute;overflow:visible!important;pointer-events:none!important;font-size:16px}#leader-line-defs{width:0;height:0;position:absolute;left:0;top:0}.leader-line-line-path{fill:none}.leader-line-mask-bg-rect{fill:white}.leader-line-caps-mask-anchor,.leader-line-caps-mask-marker-shape{fill:black}.leader-line-caps-mask-anchor{stroke:black}.leader-line-caps-mask-line,.leader-line-plugs-face{stroke:rgba(0,0,0,0)}.leader-line-line-mask-shape{stroke:white}.leader-line-line-outline-mask-shape{stroke:black}.leader-line-plug-mask-shape{fill:white;stroke:black}.leader-line-plug-outline-mask-shape{fill:black;stroke:white}.leader-line-areaAnchor{position:absolute;overflow:visible!important}]]></style><defs><circle id="leader-line-disc" cx="0" cy="0" r="5"/><rect id="leader-line-square" x="-5" y="-5" width="10" height="10"/><polygon id="leader-line-arrow1" points="-8,-8 8,0 -8,8 -5,0"/><polygon id="leader-line-arrow2" points="-4,-8 4,0 -4,8 -7,5 -2,0 -7,-5"/><polygon id="leader-line-arrow3" points="-4,-5 8,0 -4,5"/><g id="leader-line-hand"><path style="fill: #fcfcfc" d="M9.19 11.14h4.75c1.38 0 2.49-1.11 2.49-2.49 0-.51-.15-.98-.41-1.37h1.3c1.38 0 2.49-1.11 2.49-2.49s-1.11-2.53-2.49-2.53h1.02c1.38 0 2.49-1.11 2.49-2.49s-1.11-2.49-2.49-2.49h14.96c1.37 0 2.49-1.11 2.49-2.49s-1.11-2.49-2.49-2.49H16.58C16-9.86 14.28-11.14 9.7-11.14c-4.79 0-6.55 3.42-7.87 4.73H-2.14v13.23h3.68C3.29 9.97 5.47 11.14 9.19 11.14L9.19 11.14Z"/><path style="fill: black" d="M13.95 12c1.85 0 3.35-1.5 3.35-3.35 0-.17-.02-.34-.04-.51h.07c1.85 0 3.35-1.5 3.35-3.35 0-.79-.27-1.51-.72-2.08 1.03-.57 1.74-1.67 1.74-2.93 0-.59-.16-1.15-.43-1.63h12.04c1.85 0 3.35-1.5 3.35-3.35 0-1.85-1.5-3.35-3.35-3.35H17.2C16.26-10.93 13.91-12 9.7-12 5.36-12 3.22-9.4 1.94-7.84c0 0-.29.33-.5.57-.63 0-3.58 0-3.58 0C-2.61-7.27-3-6.88-3-6.41v13.23c0 .47.39.86.86.86 0 0 2.48 0 3.2 0C2.9 10.73 5.29 12 9.19 12L13.95 12ZM9.19 10.28c-3.46 0-5.33-1.05-6.9-3.87-.15-.27-.44-.44-.75-.44 0 0-1.81 0-2.82 0V-5.55c1.06 0 3.11 0 3.11 0 .25 0 .44-.06.61-.25l.83-.95c1.23-1.49 2.91-3.53 6.43-3.53 3.45 0 4.9.74 5.57 1.72h-4.3c-.48 0-.86.38-.86.86s.39.86.86.86h22.34c.9 0 1.63.73 1.63 1.63 0 .9-.73 1.63-1.63 1.63H15.83c-.48 0-.86.38-.86.86 0 .47.39.86.86.86h2.52c.9 0 1.63.73 1.63 1.63s-.73 1.63-1.63 1.63h-3.12c-.48 0-.86.38-.86.86 0 .47.39.86.86.86h2.11c.88 0 1.63.76 1.63 1.67 0 .9-.73 1.63-1.63 1.63h-3.2c-.48 0-.86.39-.86.86 0 .47.39.86.86.86h1.36c.05.16.09.34.09.51 0 .9-.73 1.63-1.63 1.63C13.95 10.28 9.19 10.28 9.19 10.28Z"/></g><g id="leader-line-crosshair"><path d="M0-78.97c-43.54 0-78.97 35.43-78.97 78.97 0 43.54 35.43 78.97 78.97 78.97s78.97-35.43 78.97-78.97C78.97-43.54 43.55-78.97 0-78.97ZM76.51-1.21h-9.91v-9.11h-2.43v9.11h-11.45c-.64-28.12-23.38-50.86-51.5-51.5V-64.17h9.11V-66.6h-9.11v-9.91C42.46-75.86 75.86-42.45 76.51-1.21ZM-1.21-30.76h-9.11v2.43h9.11V-4.2c-1.44.42-2.57 1.54-2.98 2.98H-28.33v-9.11h-2.43v9.11H-50.29C-49.65-28-27.99-49.65-1.21-50.29V-30.76ZM-30.76 1.21v9.11h2.43v-9.11H-4.2c.42 1.44 1.54 2.57 2.98 2.98v24.13h-9.11v2.43h9.11v19.53C-27.99 49.65-49.65 28-50.29 1.21H-30.76ZM1.22 30.75h9.11v-2.43h-9.11V4.2c1.44-.42 2.56-1.54 2.98-2.98h24.13v9.11h2.43v-9.11h19.53C49.65 28 28 49.65 1.22 50.29V30.75ZM30.76-1.21v-9.11h-2.43v9.11H4.2c-.42-1.44-1.54-2.56-2.98-2.98V-28.33h9.11v-2.43h-9.11V-50.29C28-49.65 49.65-28 50.29-1.21H30.76ZM-1.21-76.51v9.91h-9.11v2.43h9.11v11.45c-28.12.64-50.86 23.38-51.5 51.5H-64.17v-9.11H-66.6v9.11h-9.91C-75.86-42.45-42.45-75.86-1.21-76.51ZM-76.51 1.21h9.91v9.11h2.43v-9.11h11.45c.64 28.12 23.38 50.86 51.5 51.5v11.45h-9.11v2.43h9.11v9.91C-42.45 75.86-75.86 42.45-76.51 1.21ZM1.22 76.51v-9.91h9.11v-2.43h-9.11v-11.45c28.12-.64 50.86-23.38 51.5-51.5h11.45v9.11h2.43v-9.11h9.91C75.86 42.45 42.45 75.86 1.22 76.51Z"/><path d="M0 83.58-7.1 96 7.1 96Z"/><path d="M0-83.58 7.1-96-7.1-96"/><path d="M83.58 0 96 7.1 96-7.1Z"/><path d="M-83.58 0-96-7.1-96 7.1Z"/></g></defs></svg>',
  X = {
      disc: {
          elmId: "leader-line-disc",
          noRotate: !0,
          bBox: {
              left: -5,
              top: -5,
              width: 10,
              height: 10,
              right: 5,
              bottom: 5
          },
          widthR: 2.5,
          heightR: 2.5,
          bCircle: 5,
          sideLen: 5,
          backLen: 5,
          overhead: 0,
          outlineBase: 1,
          outlineMax: 4
      },
      square: {
          elmId: "leader-line-square",
          noRotate: !0,
          bBox: {
              left: -5,
              top: -5,
              width: 10,
              height: 10,
              right: 5,
              bottom: 5
          },
          widthR: 2.5,
          heightR: 2.5,
          bCircle: 5,
          sideLen: 5,
          backLen: 5,
          overhead: 0,
          outlineBase: 1,
          outlineMax: 4
      },
      arrow1: {
          elmId: "leader-line-arrow1",
          bBox: {
              left: -8,
              top: -8,
              width: 16,
              height: 16,
              right: 8,
              bottom: 8
          },
          widthR: 4,
          heightR: 4,
          bCircle: 8,
          sideLen: 8,
          backLen: 8,
          overhead: 8,
          outlineBase: 2,
          outlineMax: 1.5
      },
      arrow2: {
          elmId: "leader-line-arrow2",
          bBox: {
              left: -7,
              top: -8,
              width: 11,
              height: 16,
              right: 4,
              bottom: 8
          },
          widthR: 2.75,
          heightR: 4,
          bCircle: 8,
          sideLen: 8,
          backLen: 7,
          overhead: 4,
          outlineBase: 1,
          outlineMax: 1.75
      },
      arrow3: {
          elmId: "leader-line-arrow3",
          bBox: {
              left: -4,
              top: -5,
              width: 12,
              height: 10,
              right: 8,
              bottom: 5
          },
          widthR: 3,
          heightR: 2.5,
          bCircle: 8,
          sideLen: 5,
          backLen: 4,
          overhead: 8,
          outlineBase: 1,
          outlineMax: 2.5
      },
      hand: {
          elmId: "leader-line-hand",
          bBox: {
              left: -3,
              top: -12,
              width: 40,
              height: 24,
              right: 37,
              bottom: 12
          },
          widthR: 10,
          heightR: 6,
          bCircle: 37,
          sideLen: 12,
          backLen: 3,
          overhead: 37
      },
      crosshair: {
          elmId: "leader-line-crosshair",
          noRotate: !0,
          bBox: {
              left: -96,
              top: -96,
              width: 192,
              height: 192,
              right: 96,
              bottom: 96
          },
          widthR: 48,
          heightR: 48,
          bCircle: 96,
          sideLen: 96,
          backLen: 96,
          overhead: 0
      }
  },
  F = {
      behind: Y,
      disc: "disc",
      square: "square",
      arrow1: "arrow1",
      arrow2: "arrow2",
      arrow3: "arrow3",
      hand: "hand",
      crosshair: "crosshair"
  },
  q = {
      disc: "disc",
      square: "square",
      arrow1: "arrow1",
      arrow2: "arrow2",
      arrow3: "arrow3",
      hand: "hand",
      crosshair: "crosshair"
  },
  G = [b, k, L, A],
  D = "auto",
  Q = {
      x: "left",
      y: "top",
      width: "width",
      height: "height"
  },
  z = 80,
  j = 4,
  H = 5,
  U = 120,
  K = 8,
  J = 3.75,
  $ = 10,
  ee = 30,
  te = .5522847,
  ne = .25 * Math.PI,
  m = /^\s*(\-?[\d\.]+)\s*(\%)?\s*$/,
  ae = "http://www.w3.org/2000/svg",
  S = "-ms-scroll-limit" in document.documentElement.style && "-ms-ime-align" in document.documentElement.style && !window.navigator.msPointerEnabled,
  ie = !S && !!document.uniqueID,
  oe = "MozAppearance" in document.documentElement.style,
  le = !(S || oe || !window.chrome || !window.CSS),
  re = !S && !ie && !oe && !le && !window.chrome && "WebkitAppearance" in document.documentElement.style,
  se = ie || S ? .2 : .1,
  ue = {
      path: T,
      lineColor: "coral",
      lineSize: 4,
      plugSE: [Y, "arrow1"],
      plugSizeSE: [1, 1],
      lineOutlineEnabled: !1,
      lineOutlineColor: "indianred",
      lineOutlineSize: .25,
      plugOutlineEnabledSE: [!1, !1],
      plugOutlineSizeSE: [1, 1]
  },
  he = (p = {}.toString, c = {}.hasOwnProperty.toString, d = c.call(Object),
  function(e) {
      return e && "[object Object]" === p.call(e) && (!(e = Object.getPrototypeOf(e)) || (e = e.hasOwnProperty("constructor") && e.constructor) && "function" == typeof e && c.call(e) === d)
  }),
  pe = Number.isFinite ||
  function(e) {
      return "number" == typeof e && window.isFinite(e)
  },
  g = (_ = {
      ease: [.25, .1, .25, 1],
      linear: [0, 0, 1, 1],
      "ease-in": [.42, 0, 1, 1],
      "ease-out": [0, 0, .58, 1],
      "ease-in-out": [.42, 0, .58, 1]
  },
  v = 1e3 / 60 / 2, l = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame ||
  function(e) {
      setTimeout(e, v)
  },
  r = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.msCancelAnimationFrame ||
  function(e) {
      clearTimeout(e)
  },
  i = Number.isFinite ||
  function(e) {
      return "number" == typeof e && window.isFinite(e)
  },
  E = [], x = 0, {
      add: function(n, e, t, a, i, o, l) {
          var r, s, u, h, p, c, d, f, y, m, S = ++x;
          function g(e, t) {
              return {
                  value: n(t),
                  timeRatio: e,
                  outputRatio: t
              }
          }
          if ("string" == typeof i && (i = _[i]), n = n ||
          function() {},
          t < v) r = [g(0, 0), g(1, 1)];
          else {
              if (s = v / t, r = [g(0, 0)], 0 === i[0] && 0 === i[1] && 1 === i[2] && 1 === i[3]) for (h = s; h <= 1; h += s) r.push(g(h, h));
              else for (p = u = (h = s) / 10; p <= 1; p += u) d = p,
              m = y = f = void 0,
              f = (m = p * p) * p,
              m *= 3 * (y = 1 - p),
              h <= (c = {
                  x: (d = 3 * (y * y) * p) * i[0] + m * i[2] + f,
                  y: d * i[1] + m * i[3] + f
              }).x && (r.push(g(c.x, c.y)), h += s);
              r.push(g(1, 1))
          }
          return E.push(o = {
              animId: S,
              frameCallback: e,
              duration: t,
              count: a,
              frames: r,
              reverse: !!o
          }),
          !1 !== l && be(o, l),
          S
      },
      remove: function(n) {
          var a;
          E.some(function(e, t) {
              return e.animId === n && (a = t, !(e.framesStart = null))
          }) && E.splice(a, 1)
      },
      start: function(t, n, a) {
          E.some(function(e) {
              return e.animId === t && (e.reverse = !!n, be(e, a), !0)
          })
      },
      stop: function(t, n) {
          var a;
          return E.some(function(e) {
              return e.animId === t && (n ? null != e.lastFrame && (a = e.frames[e.lastFrame].timeRatio) : (a = (Date.now() - e.framesStart) / e.duration, (a = e.reverse ? 1 - a: a) < 0 ? a = 0 : 1 < a && (a = 1)), !(e.framesStart = null))
          }),
          a
      },
      validTiming: function(t) {
          return "string" == typeof t ? _[t] : Array.isArray(t) && [0, 1, 2, 3].every(function(e) {
              return i(t[e]) && 0 <= t[e] && t[e] <= 1
          }) ? [t[0], t[1], t[2], t[3]] : null
      }
  }),
  ce = function(e) {
      e.SVGPathElement.prototype.getPathData && e.SVGPathElement.prototype.setPathData ||
      function() {
          function i(e) {
              this._string = e,
              this._currentIndex = 0,
              this._endIndex = this._string.length,
              this._prevCommand = null,
              this._skipOptionalSpaces()
          }
          var a = {
              Z: "Z",
              M: "M",
              L: "L",
              C: "C",
              Q: "Q",
              A: "A",
              H: "H",
              V: "V",
              S: "S",
              T: "T",
              z: "Z",
              m: "m",
              l: "l",
              c: "c",
              q: "q",
              a: "a",
              h: "h",
              v: "v",
              s: "s",
              t: "t"
          },
          o = -1 !== e.navigator.userAgent.indexOf("MSIE ");
          i.prototype = {
              parseSegment: function() {
                  var e = this._string[this._currentIndex],
                  t = a[e] || null;
                  if (null === t) {
                      if (null === this._prevCommand) return null;
                      if (null === (t = ("+" === e || "-" === e || "." === e || "0" <= e && e <= "9") && "Z" !== this._prevCommand ? "M" === this._prevCommand ? "L": "m" === this._prevCommand ? "l": this._prevCommand: null)) return null
                  } else this._currentIndex += 1;
                  var n = null,
                  e = (this._prevCommand = t).toUpperCase();
                  return "H" === e || "V" === e ? n = [this._parseNumber()] : "M" === e || "L" === e || "T" === e ? n = [this._parseNumber(), this._parseNumber()] : "S" === e || "Q" === e ? n = [this._parseNumber(), this._parseNumber(), this._parseNumber(), this._parseNumber()] : "C" === e ? n = [this._parseNumber(), this._parseNumber(), this._parseNumber(), this._parseNumber(), this._parseNumber(), this._parseNumber()] : "A" === e ? n = [this._parseNumber(), this._parseNumber(), this._parseNumber(), this._parseArcFlag(), this._parseArcFlag(), this._parseNumber(), this._parseNumber()] : "Z" === e && (this._skipOptionalSpaces(), n = []),
                  null === n || 0 <= n.indexOf(null) ? null: {
                      type: t,
                      values: n
                  }
              },
              hasMoreData: function() {
                  return this._currentIndex < this._endIndex
              },
              peekSegmentType: function() {
                  var e = this._string[this._currentIndex];
                  return a[e] || null
              },
              initialCommandIsMoveTo: function() {
                  if (!this.hasMoreData()) return ! 0;
                  var e = this.peekSegmentType();
                  return "M" === e || "m" === e
              },
              _isCurrentSpace: function() {
                  var e = this._string[this._currentIndex];
                  return e <= " " && (" " === e || "\n" === e || "\t" === e || "\r" === e || "\f" === e)
              },
              _skipOptionalSpaces: function() {
                  for (; this._currentIndex < this._endIndex && this._isCurrentSpace();) this._currentIndex += 1;
                  return this._currentIndex < this._endIndex
              },
              _skipOptionalSpacesOrDelimiter: function() {
                  return ! (this._currentIndex < this._endIndex && !this._isCurrentSpace() && "," !== this._string[this._currentIndex]) && (this._skipOptionalSpaces() && this._currentIndex < this._endIndex && "," === this._string[this._currentIndex] && (this._currentIndex += 1, this._skipOptionalSpaces()), this._currentIndex < this._endIndex)
              },
              _parseNumber: function() {
                  var e = 0,
                  t = 0,
                  n = 1,
                  a = 0,
                  i = 1,
                  o = 1,
                  l = this._currentIndex;
                  if (this._skipOptionalSpaces(), this._currentIndex < this._endIndex && "+" === this._string[this._currentIndex] ? this._currentIndex += 1 : this._currentIndex < this._endIndex && "-" === this._string[this._currentIndex] && (this._currentIndex += 1, i = -1), this._currentIndex === this._endIndex || (this._string[this._currentIndex] < "0" || "9" < this._string[this._currentIndex]) && "." !== this._string[this._currentIndex]) return null;
                  for (var r = this._currentIndex; this._currentIndex < this._endIndex && "0" <= this._string[this._currentIndex] && this._string[this._currentIndex] <= "9";) this._currentIndex += 1;
                  if (this._currentIndex !== r) for (var s = this._currentIndex - 1,
                  u = 1; r <= s;) t += u * (this._string[s] - "0"),
                  --s,
                  u *= 10;
                  if (this._currentIndex < this._endIndex && "." === this._string[this._currentIndex]) {
                      if (this._currentIndex += 1, this._currentIndex >= this._endIndex || this._string[this._currentIndex] < "0" || "9" < this._string[this._currentIndex]) return null;
                      for (; this._currentIndex < this._endIndex && "0" <= this._string[this._currentIndex] && this._string[this._currentIndex] <= "9";) n *= 10,
                      a += (this._string.charAt(this._currentIndex) - "0") / n,
                      this._currentIndex += 1
                  }
                  if (this._currentIndex !== l && this._currentIndex + 1 < this._endIndex && ("e" === this._string[this._currentIndex] || "E" === this._string[this._currentIndex]) && "x" !== this._string[this._currentIndex + 1] && "m" !== this._string[this._currentIndex + 1]) {
                      if (this._currentIndex += 1, "+" === this._string[this._currentIndex] ? this._currentIndex += 1 : "-" === this._string[this._currentIndex] && (this._currentIndex += 1, o = -1), this._currentIndex >= this._endIndex || this._string[this._currentIndex] < "0" || "9" < this._string[this._currentIndex]) return null;
                      for (; this._currentIndex < this._endIndex && "0" <= this._string[this._currentIndex] && this._string[this._currentIndex] <= "9";) e *= 10,
                      e += this._string[this._currentIndex] - "0",
                      this._currentIndex += 1
                  }
                  var h = t + a;
                  return h *= i,
                  e && (h *= Math.pow(10, o * e)),
                  l === this._currentIndex ? null: (this._skipOptionalSpacesOrDelimiter(), h)
              },
              _parseArcFlag: function() {
                  if (this._currentIndex >= this._endIndex) return null;
                  var e = null,
                  t = this._string[this._currentIndex];
                  if (this._currentIndex += 1, "0" === t) e = 0;
                  else {
                      if ("1" !== t) return null;
                      e = 1
                  }
                  return this._skipOptionalSpacesOrDelimiter(),
                  e
              }
          };
          function n(e) {
              if (!e || 0 === e.length) return [];
              var t = new i(e),
              n = [];
              if (t.initialCommandIsMoveTo()) for (; t.hasMoreData();) {
                  var a = t.parseSegment();
                  if (null === a) break;
                  n.push(a)
              }
              return n
          }
          function l(e) {
              return e.map(function(e) {
                  return {
                      type: e.type,
                      values: Array.prototype.slice.call(e.values)
                  }
              })
          }
          function r(e) {
              var u = [],
              h = null,
              p = null,
              c = null,
              d = null,
              f = null,
              y = null,
              m = null;
              return e.forEach(function(e) {
                  var t, n, a, i, o, l, r, s;
                  "M" === e.type ? (r = e.values[0], s = e.values[1], u.push({
                      type: "M",
                      values: [r, s]
                  }), d = y = r, f = m = s) : "C" === e.type ? (o = e.values[0], l = e.values[1], t = e.values[2], n = e.values[3], r = e.values[4], s = e.values[5], u.push({
                      type: "C",
                      values: [o, l, t, n, r, s]
                  }), p = t, c = n, d = r, f = s) : "L" === e.type ? (r = e.values[0], s = e.values[1], u.push({
                      type: "L",
                      values: [r, s]
                  }), d = r, f = s) : "H" === e.type ? (r = e.values[0], u.push({
                      type: "L",
                      values: [r, f]
                  }), d = r) : "V" === e.type ? (s = e.values[0], u.push({
                      type: "L",
                      values: [d, s]
                  }), f = s) : "S" === e.type ? (t = e.values[0], n = e.values[1], r = e.values[2], s = e.values[3], i = "C" === h || "S" === h ? (a = d + (d - p), f + (f - c)) : (a = d, f), u.push({
                      type: "C",
                      values: [a, i, t, n, r, s]
                  }), p = t, c = n, d = r, f = s) : "T" === e.type ? (r = e.values[0], s = e.values[1], l = "Q" === h || "T" === h ? (o = d + (d - p), f + (f - c)) : (o = d, f), u.push({
                      type: "C",
                      values: [a = d + 2 * (o - d) / 3, i = f + 2 * (l - f) / 3, r + 2 * (o - r) / 3, s + 2 * (l - s) / 3, r, s]
                  }), p = o, c = l, d = r, f = s) : "Q" === e.type ? (o = e.values[0], l = e.values[1], r = e.values[2], s = e.values[3], u.push({
                      type: "C",
                      values: [a = d + 2 * (o - d) / 3, i = f + 2 * (l - f) / 3, r + 2 * (o - r) / 3, s + 2 * (l - s) / 3, r, s]
                  }), p = o, c = l, d = r, f = s) : "A" === e.type ? (n = e.values[0], a = e.values[1], i = e.values[2], o = e.values[3], l = e.values[4], r = e.values[5], s = e.values[6], 0 === n || 0 === a ? (u.push({
                      type: "C",
                      values: [d, f, r, s, r, s]
                  }), d = r, f = s) : d === r && f === s || b(d, f, r, s, n, a, i, o, l).forEach(function(e) {
                      u.push({
                          type: "C",
                          values: e
                      }),
                      d = r,
                      f = s
                  })) : "Z" === e.type && (u.push(e), d = y, f = m),
                  h = e.type
              }),
              u
          }
          var s = e.SVGPathElement.prototype.setAttribute,
          u = e.SVGPathElement.prototype.removeAttribute,
          d = e.Symbol ? e.Symbol() : "__cachedPathData",
          f = e.Symbol ? e.Symbol() : "__cachedNormalizedPathData",
          b = function(e, t, n, a, i, o, l, r, s, u) {
              function h(e, t, n) {
                  return {
                      x: e * Math.cos(n) - t * Math.sin(n),
                      y: e * Math.sin(n) + t * Math.cos(n)
                  }
              }
              var p = Math.PI * l / 180,
              c = [];
              u ? (_ = u[0], v = u[1], S = u[2], g = u[3]) : (e = (m = h(e, t, -p)).x, t = m.y, 1 < (m = (y = (e - (n = (f = h(n, a, -p)).x)) / 2) * y / (i * i) + (d = (t - (a = f.y)) / 2) * d / (o * o)) && (i *= m = Math.sqrt(m), o *= m), f = i * i, m = o * o, S = (f = (r === s ? -1 : 1) * Math.sqrt(Math.abs((f * m - f * d * d - m * y * y) / (f * d * d + m * y * y)))) * i * d / o + (e + n) / 2, g = f * -o * y / i + (t + a) / 2, _ = Math.asin(parseFloat(((t - g) / o).toFixed(9))), v = Math.asin(parseFloat(((a - g) / o).toFixed(9))), e < S && (_ = Math.PI - _), n < S && (v = Math.PI - v), _ < 0 && (_ = 2 * Math.PI + _), v < 0 && (v = 2 * Math.PI + v), s && v < _ && (_ -= 2 * Math.PI), !s && _ < v && (v -= 2 * Math.PI));
              var d, f, y, m = v - _;
              Math.abs(m) > 120 * Math.PI / 180 && (d = v, f = n, y = a, v = s && _ < v ? _ + 120 * Math.PI / 180 * 1 : _ + 120 * Math.PI / 180 * -1, n = S + i * Math.cos(v), a = g + o * Math.sin(v), c = b(n, a, f, y, i, o, l, 0, s, [v, d, S, g]));
              var m = v - _,
              S = Math.cos(_),
              g = Math.sin(_),
              _ = Math.cos(v),
              v = Math.sin(v),
              m = Math.tan(m / 4),
              i = 4 / 3 * i * m,
              o = 4 / 3 * o * m,
              m = [e, t],
              S = [e + i * g, t - o * S],
              _ = [n + i * v, a - o * _],
              a = [n, a];
              if (S[0] = 2 * m[0] - S[0], S[1] = 2 * m[1] - S[1], u) return [S, _, a].concat(c);
              var c = [S, _, a].concat(c).join().split(","),
              E = [],
              x = [];
              return c.forEach(function(e, t) {
                  t % 2 ? x.push(h(c[t - 1], c[t], p).y) : x.push(h(c[t], c[t + 1], p).x),
                  6 === x.length && (E.push(x), x = [])
              }),
              E
          };
          e.SVGPathElement.prototype.setAttribute = function(e, t) {
              "d" === e && (this[d] = null, this[f] = null),
              s.call(this, e, t)
          },
          e.SVGPathElement.prototype.removeAttribute = function(e, t) {
              "d" === e && (this[d] = null, this[f] = null),
              u.call(this, e)
          },
          e.SVGPathElement.prototype.getPathData = function(e) {
              if (e && e.normalize) {
                  if (this[f]) return l(this[f]);
                  this[d] ? t = l(this[d]) : (t = n(this.getAttribute("d") || ""), this[d] = l(t));
                  e = r((s = [], c = p = h = u = null, t.forEach(function(e) {
                      var t, n, a, i, o, l, r = e.type;
                      "M" === r ? (o = e.values[0], l = e.values[1], s.push({
                          type: "M",
                          values: [o, l]
                      }), u = p = o, h = c = l) : "m" === r ? (o = u + e.values[0], l = h + e.values[1], s.push({
                          type: "M",
                          values: [o, l]
                      }), u = p = o, h = c = l) : "L" === r ? (o = e.values[0], l = e.values[1], s.push({
                          type: "L",
                          values: [o, l]
                      }), u = o, h = l) : "l" === r ? (o = u + e.values[0], l = h + e.values[1], s.push({
                          type: "L",
                          values: [o, l]
                      }), u = o, h = l) : "C" === r ? (t = e.values[0], n = e.values[1], a = e.values[2], i = e.values[3], o = e.values[4], l = e.values[5], s.push({
                          type: "C",
                          values: [t, n, a, i, o, l]
                      }), u = o, h = l) : "c" === r ? (t = u + e.values[0], n = h + e.values[1], a = u + e.values[2], i = h + e.values[3], o = u + e.values[4], l = h + e.values[5], s.push({
                          type: "C",
                          values: [t, n, a, i, o, l]
                      }), u = o, h = l) : "Q" === r ? (t = e.values[0], n = e.values[1], o = e.values[2], l = e.values[3], s.push({
                          type: "Q",
                          values: [t, n, o, l]
                      }), u = o, h = l) : "q" === r ? (t = u + e.values[0], n = h + e.values[1], o = u + e.values[2], l = h + e.values[3], s.push({
                          type: "Q",
                          values: [t, n, o, l]
                      }), u = o, h = l) : "A" === r ? (o = e.values[5], l = e.values[6], s.push({
                          type: "A",
                          values: [e.values[0], e.values[1], e.values[2], e.values[3], e.values[4], o, l]
                      }), u = o, h = l) : "a" === r ? (o = u + e.values[5], l = h + e.values[6], s.push({
                          type: "A",
                          values: [e.values[0], e.values[1], e.values[2], e.values[3], e.values[4], o, l]
                      }), u = o, h = l) : "H" === r ? (o = e.values[0], s.push({
                          type: "H",
                          values: [o]
                      }), u = o) : "h" === r ? (o = u + e.values[0], s.push({
                          type: "H",
                          values: [o]
                      }), u = o) : "V" === r ? (l = e.values[0], s.push({
                          type: "V",
                          values: [l]
                      }), h = l) : "v" === r ? (l = h + e.values[0], s.push({
                          type: "V",
                          values: [l]
                      }), h = l) : "S" === r ? (a = e.values[0], i = e.values[1], o = e.values[2], l = e.values[3], s.push({
                          type: "S",
                          values: [a, i, o, l]
                      }), u = o, h = l) : "s" === r ? (a = u + e.values[0], i = h + e.values[1], o = u + e.values[2], l = h + e.values[3], s.push({
                          type: "S",
                          values: [a, i, o, l]
                      }), u = o, h = l) : "T" === r ? (o = e.values[0], l = e.values[1], s.push({
                          type: "T",
                          values: [o, l]
                      }), u = o, h = l) : "t" === r ? (o = u + e.values[0], l = h + e.values[1], s.push({
                          type: "T",
                          values: [o, l]
                      }), u = o, h = l) : "Z" !== r && "z" !== r || (s.push({
                          type: "Z",
                          values: []
                      }), u = p, h = c)
                  }), s));
                  return this[f] = l(e),
                  e
              }
              if (this[d]) return l(this[d]);
              var s, u, h, p, c, t = n(this.getAttribute("d") || "");
              return this[d] = l(t),
              t
          },
          e.SVGPathElement.prototype.setPathData = function(e) {
              if (0 === e.length) o ? this.setAttribute("d", "") : this.removeAttribute("d");
              else {
                  for (var t = "",
                  n = 0,
                  a = e.length; n < a; n += 1) {
                      var i = e[n];
                      0 < n && (t += " "),
                      t += i.type,
                      i.values && 0 < i.values.length && (t += " " + i.values.join(" "))
                  }
                  this.setAttribute("d", t)
              }
          },
          e.SVGRectElement.prototype.getPathData = function(e) {
              var t = this.x.baseVal.value,
              n = this.y.baseVal.value,
              a = this.width.baseVal.value,
              i = this.height.baseVal.value,
              o = (this.hasAttribute("rx") ? this.rx: this.ry).baseVal.value,
              l = (this.hasAttribute("ry") ? this.ry: this.rx).baseVal.value,
              n = (n = [{
                  type: "M",
                  values: [t + (o = a / 2 < o ? a / 2 : o), n]
              },
              {
                  type: "H",
                  values: [t + a - o]
              },
              {
                  type: "A",
                  values: [o, l = i / 2 < l ? i / 2 : l, 0, 0, 1, t + a, n + l]
              },
              {
                  type: "V",
                  values: [n + i - l]
              },
              {
                  type: "A",
                  values: [o, l, 0, 0, 1, t + a - o, n + i]
              },
              {
                  type: "H",
                  values: [t + o]
              },
              {
                  type: "A",
                  values: [o, l, 0, 0, 1, t, n + i - l]
              },
              {
                  type: "V",
                  values: [n + l]
              },
              {
                  type: "A",
                  values: [o, l, 0, 0, 1, t + o, n]
              },
              {
                  type: "Z",
                  values: []
              }]).filter(function(e) {
                  return "A" !== e.type || 0 !== e.values[0] && 0 !== e.values[1]
              });
              return n = e && !0 === e.normalize ? r(n) : n
          },
          e.SVGCircleElement.prototype.getPathData = function(e) {
              var t = this.cx.baseVal.value,
              n = this.cy.baseVal.value,
              a = this.r.baseVal.value,
              n = [{
                  type: "M",
                  values: [t + a, n]
              },
              {
                  type: "A",
                  values: [a, a, 0, 0, 1, t, n + a]
              },
              {
                  type: "A",
                  values: [a, a, 0, 0, 1, t - a, n]
              },
              {
                  type: "A",
                  values: [a, a, 0, 0, 1, t, n - a]
              },
              {
                  type: "A",
                  values: [a, a, 0, 0, 1, t + a, n]
              },
              {
                  type: "Z",
                  values: []
              }];
              return n = e && !0 === e.normalize ? r(n) : n
          },
          e.SVGEllipseElement.prototype.getPathData = function(e) {
              var t = this.cx.baseVal.value,
              n = this.cy.baseVal.value,
              a = this.rx.baseVal.value,
              i = this.ry.baseVal.value,
              n = [{
                  type: "M",
                  values: [t + a, n]
              },
              {
                  type: "A",
                  values: [a, i, 0, 0, 1, t, n + i]
              },
              {
                  type: "A",
                  values: [a, i, 0, 0, 1, t - a, n]
              },
              {
                  type: "A",
                  values: [a, i, 0, 0, 1, t, n - i]
              },
              {
                  type: "A",
                  values: [a, i, 0, 0, 1, t + a, n]
              },
              {
                  type: "Z",
                  values: []
              }];
              return n = e && !0 === e.normalize ? r(n) : n
          },
          e.SVGLineElement.prototype.getPathData = function() {
              return [{
                  type: "M",
                  values: [this.x1.baseVal.value, this.y1.baseVal.value]
              },
              {
                  type: "L",
                  values: [this.x2.baseVal.value, this.y2.baseVal.value]
              }]
          },
          e.SVGPolylineElement.prototype.getPathData = function() {
              for (var e = [], t = 0; t < this.points.numberOfItems; t += 1) {
                  var n = this.points.getItem(t);
                  e.push({
                      type: 0 === t ? "M": "L",
                      values: [n.x, n.y]
                  })
              }
              return e
          },
          e.SVGPolygonElement.prototype.getPathData = function() {
              for (var e = [], t = 0; t < this.points.numberOfItems; t += 1) {
                  var n = this.points.getItem(t);
                  e.push({
                      type: 0 === t ? "M": "L",
                      values: [n.x, n.y]
                  })
              }
              return e.push({
                  type: "Z",
                  values: []
              }),
              e
          }
      } ()
  },
  S = (a = {},
  Ee.m = n = [function(e, t, n) {
      n.r(t);
      var a = 500,
      i = [],
      o = window.requestAnimationFrame || window.mozRequestAnimationFrame || window.webkitRequestAnimationFrame || window.msRequestAnimationFrame ||
      function(e) {
          return setTimeout(e, 1e3 / 60)
      },
      l = window.cancelAnimationFrame || window.mozCancelAnimationFrame || window.webkitCancelAnimationFrame || window.msCancelAnimationFrame ||
      function(e) {
          return clearTimeout(e)
      },
      r = Date.now(),
      s = void 0;
      function u() {
          var n = void 0,
          e = void 0;
          s && (l.call(window, s), s = null),
          i.forEach(function(e) {
              var t; (t = e.event) && (e.event = null, e.listener(t), n = !0)
          }),
          n ? (r = Date.now(), e = !0) : Date.now() - r < a && (e = !0),
          e && (s = o.call(window, u))
      }
      function h(n) {
          var a = -1;
          return i.some(function(e, t) {
              return e.listener === n && (a = t, !0)
          }),
          a
      }
      t.
  default = {
          add: function(e) {
              var t = void 0;
              return - 1 === h(e) ? (i.push(t = {
                  listener: e
              }),
              function(e) {
                  t.event = e,
                  s || u()
              }) : null
          },
          remove: function(e) { - 1 < (e = h(e)) && (i.splice(e, 1), !i.length && s && (l.call(window, s), s = null))
          }
      }
  }], Ee.c = a, Ee.d = function(e, t, n) {
      Ee.o(e, t) || Object.defineProperty(e, t, {
          enumerable: !0,
          get: n
      })
  },
  Ee.r = function(e) {
      "undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
          value: "Module"
      }),
      Object.defineProperty(e, "__esModule", {
          value: !0
      })
  },
  Ee.t = function(t, e) {
      if (1 & e && (t = Ee(t)), 8 & e) return t;
      if (4 & e && "object" == typeof t && t && t.__esModule) return t;
      var n = Object.create(null);
      if (Ee.r(n), Object.defineProperty(n, "default", {
          enumerable: !0,
          value: t
      }), 2 & e && "string" != typeof t) for (var a in t) Ee.d(n, a,
      function(e) {
          return t[e]
      }.bind(null, a));
      return n
  },
  Ee.n = function(e) {
      var t = e && e.__esModule ?
      function() {
          return e.
      default
      }:
      function() {
          return e
      };
      return Ee.d(t, "a", t),
      t
  },
  Ee.o = function(e, t) {
      return Object.prototype.hasOwnProperty.call(e, t)
  },
  Ee.p = "", Ee(Ee.s = 0).
default),
  de = {
      line_altColor: {
          iniValue: !1
      },
      line_color: {},
      line_colorTra: {
          iniValue: !1
      },
      line_strokeWidth: {},
      plug_enabled: {
          iniValue: !1
      },
      plug_enabledSE: {
          hasSE: !0,
          iniValue: !1
      },
      plug_plugSE: {
          hasSE: !0,
          iniValue: Y
      },
      plug_colorSE: {
          hasSE: !0
      },
      plug_colorTraSE: {
          hasSE: !0,
          iniValue: !1
      },
      plug_markerWidthSE: {
          hasSE: !0
      },
      plug_markerHeightSE: {
          hasSE: !0
      },
      lineOutline_enabled: {
          iniValue: !1
      },
      lineOutline_color: {},
      lineOutline_colorTra: {
          iniValue: !1
      },
      lineOutline_strokeWidth: {},
      lineOutline_inStrokeWidth: {},
      plugOutline_enabledSE: {
          hasSE: !0,
          iniValue: !1
      },
      plugOutline_plugSE: {
          hasSE: !0,
          iniValue: Y
      },
      plugOutline_colorSE: {
          hasSE: !0
      },
      plugOutline_colorTraSE: {
          hasSE: !0,
          iniValue: !1
      },
      plugOutline_strokeWidthSE: {
          hasSE: !0
      },
      plugOutline_inStrokeWidthSE: {
          hasSE: !0
      },
      position_socketXYSE: {
          hasSE: !0,
          hasProps: !0
      },
      position_plugOverheadSE: {
          hasSE: !0
      },
      position_path: {},
      position_lineStrokeWidth: {},
      position_socketGravitySE: {
          hasSE: !0
      },
      path_pathData: {},
      path_edge: {
          hasProps: !0
      },
      viewBox_bBox: {
          hasProps: !0
      },
      viewBox_plugBCircleSE: {
          hasSE: !0
      },
      lineMask_enabled: {
          iniValue: !1
      },
      lineMask_outlineMode: {
          iniValue: !1
      },
      lineMask_x: {},
      lineMask_y: {},
      lineOutlineMask_x: {},
      lineOutlineMask_y: {},
      maskBGRect_x: {},
      maskBGRect_y: {},
      capsMaskAnchor_enabledSE: {
          hasSE: !0,
          iniValue: !1
      },
      capsMaskAnchor_pathDataSE: {
          hasSE: !0
      },
      capsMaskAnchor_strokeWidthSE: {
          hasSE: !0
      },
      capsMaskMarker_enabled: {
          iniValue: !1
      },
      capsMaskMarker_enabledSE: {
          hasSE: !0,
          iniValue: !1
      },
      capsMaskMarker_plugSE: {
          hasSE: !0,
          iniValue: Y
      },
      capsMaskMarker_markerWidthSE: {
          hasSE: !0
      },
      capsMaskMarker_markerHeightSE: {
          hasSE: !0
      },
      caps_enabled: {
          iniValue: !1
      },
      attach_plugSideLenSE: {
          hasSE: !0
      },
      attach_plugBackLenSE: {
          hasSE: !0
      }
  },
  fe = {
      show_on: {},
      show_effect: {},
      show_animOptions: {},
      show_animId: {},
      show_inAnim: {}
  },
  ye = "fade",
  me = [],
  Se = {},
  ge = 0,
  _e = {},
  ve = 0;
  function Ee(e) {
      if (a[e]) return a[e].exports;
      var t = a[e] = {
          i: e,
          l: !1,
          exports: {}
      };
      return n[e].call(t.exports, t, t.exports, Ee),
      t.l = !0,
      t.exports
  }
  function xe() {
      var i = Date.now(),
      o = !1;
      e && (r.call(window, e), e = null),
      E.forEach(function(e) {
          var t, n, a;
          if (e.framesStart) {
              if ((t = i - e.framesStart) >= e.duration && e.count && e.loopsLeft <= 1) return a = e.frames[e.lastFrame = e.reverse ? 0 : e.frames.length - 1],
              e.frameCallback(a.value, !0, a.timeRatio, a.outputRatio),
              void(e.framesStart = null);
              if (t > e.duration) {
                  if (n = Math.floor(t / e.duration), e.count) {
                      if (n >= e.loopsLeft) return a = e.frames[e.lastFrame = e.reverse ? 0 : e.frames.length - 1],
                      e.frameCallback(a.value, !0, a.timeRatio, a.outputRatio),
                      void(e.framesStart = null);
                      e.loopsLeft -= n
                  }
                  e.framesStart += e.duration * n,
                  t = i - e.framesStart
              }
              e.reverse && (t = e.duration - t),
              a = e.frames[e.lastFrame = Math.round(t / v)],
              !1 !== e.frameCallback(a.value, !1, a.timeRatio, a.outputRatio) ? o = !0 : e.framesStart = null
          }
      }),
      o && (e = l.call(window, xe))
  }
  function be(e, t) {
      e.framesStart = Date.now(),
      null != t && (e.framesStart -= e.duration * (e.reverse ? 1 - t: t)),
      e.loopsLeft = e.count,
      e.lastFrame = null,
      xe()
  }
  function ke(t, n) {
      var e, a;
      return typeof t != typeof n || (e = he(t) ? "obj": Array.isArray(t) ? "array": "") != (he(n) ? "obj": Array.isArray(n) ? "array": "") || ("obj" === e ? ke(a = Object.keys(t).sort(), Object.keys(n).sort()) || a.some(function(e) {
          return ke(t[e], n[e])
      }) : "array" === e ? t.length !== n.length || t.some(function(e, t) {
          return ke(e, n[t])
      }) : t !== n)
  }
  function we(n) {
      return n && (he(n) ? Object.keys(n).reduce(function(e, t) {
          return e[t] = we(n[t]),
          e
      },
      {}) : Array.isArray(n) ? n.map(we) : n)
  }
  function Oe(e) {
      var t, n, a, i = 1,
      o = e = (e + "").trim();
      function l(e) {
          var t = 1,
          e = m.exec(e);
          return e && (t = parseFloat(e[1]), e[2] ? t = 0 <= t && t <= 100 ? t / 100 : 1 : (t < 0 || 1 < t) && (t = 1)),
          t
      }
      return (t = /^(rgba|hsla|hwb|gray|device\-cmyk)\s*\(([\s\S]+)\)$/i.exec(e)) ? (n = t[1].toLowerCase(), a = t[2].trim().split(/\s*,\s*/), "rgba" === n && 4 === a.length ? (i = l(a[3]), o = "rgb(" + a.slice(0, 3).join(", ") + ")") : "hsla" === n && 4 === a.length ? (i = l(a[3]), o = "hsl(" + a.slice(0, 3).join(", ") + ")") : "hwb" === n && 4 === a.length ? (i = l(a[3]), o = "hwb(" + a.slice(0, 3).join(", ") + ")") : "gray" === n && 2 === a.length ? (i = l(a[1]), o = "gray(" + a[0] + ")") : "device-cmyk" === n && 5 <= a.length && (i = l(a[4]), o = "device-cmyk(" + a.slice(0, 4).join(", ") + ")")) : (t = /^\#(?:([\da-f]{6})([\da-f]{2})|([\da-f]{3})([\da-f]))$/i.exec(e)) ? o = t[1] ? (i = parseInt(t[2], 16) / 255, "#" + t[1]) : (i = parseInt(t[4] + t[4], 16) / 255, "#" + t[3]) : "transparent" === e.toLocaleLowerCase() && (i = 0),
      [i, o]
  }
  function Me(e) {
      return ! (!e || e.nodeType !== Node.ELEMENT_NODE || "function" != typeof e.getBoundingClientRect)
  }
  function Ie(e, t) {
      var n, a, i, o = {};
      if (! (i = e.ownerDocument)) return console.error("Cannot get document that contains the element."),
      null;
      if (e.compareDocumentPosition(i) & Node.DOCUMENT_POSITION_DISCONNECTED) return console.error("A disconnected element was passed."),
      null;
      for (a in n = e.getBoundingClientRect()) o[a] = n[a];
      if (!t) {
          if (! (i = i.defaultView)) return console.error("Cannot get window that contains the element."),
          null;
          o.left += i.pageXOffset,
          o.right += i.pageXOffset,
          o.top += i.pageYOffset,
          o.bottom += i.pageYOffset
      }
      return o
  }
  function Ce(e, t) {
      var n, a = [],
      i = e;
      for (t = t || window;;) {
          if (! (n = document)) return console.error("Cannot get document that contains the element."),
          null;
          if (! (n = n.defaultView)) return console.error("Cannot get window that contains the element."),
          null;
          if (n === t) break;
          if (! (i = n.frameElement)) return console.error("`baseWindow` was not found."),
          null;
          a.unshift(i)
      }
      return a
  }
  function Le(e, t) {
      var a = 0,
      i = 0;
      return (t = Ce(e, t = t || window)) ? t.length ? (t.forEach(function(e, t) {
          var n = Ie(e, 0 < t);
          a += n.left,
          i += n.top,
          e = (t = e).ownerDocument.defaultView.getComputedStyle(t, ""),
          n = {
              left: t.clientLeft + parseFloat(e.paddingLeft),
              top: t.clientTop + parseFloat(e.paddingTop)
          },
          a += n.left,
          i += n.top
      }), (t = Ie(e, !0)).left += a, t.right += a, t.top += i, t.bottom += i, t) : Ie(e) : null
  }
  function Ae(e, t) {
      var n = e.x - t.x,
      t = e.y - t.y;
      return Math.sqrt(n * n + t * t)
  }
  function Ve(e, t, n) {
      var a = t.x - e.x,
      t = t.y - e.y;
      return {
          x: e.x + a * n,
          y: e.y + t * n,
          angle: Math.atan2(t, a) / (Math.PI / 180)
      }
  }
  function Pe(e, t, n) {
      e = Math.atan2(e.y - t.y, t.x - e.x);
      return {
          x: t.x + Math.cos(e) * n,
          y: t.y + Math.sin(e) * n * -1
      }
  }
  function Ne(e, t, n, a, i) {
      var o = i * i,
      l = o * i,
      r = 1 - i,
      s = r * r,
      u = s * r,
      h = u * e.x + 3 * s * i * t.x + 3 * r * o * n.x + l * a.x,
      p = u * e.y + 3 * s * i * t.y + 3 * r * o * n.y + l * a.y,
      c = e.x + 2 * i * (t.x - e.x) + o * (n.x - 2 * t.x + e.x),
      u = e.y + 2 * i * (t.y - e.y) + o * (n.y - 2 * t.y + e.y),
      s = t.x + 2 * i * (n.x - t.x) + o * (a.x - 2 * n.x + t.x),
      l = t.y + 2 * i * (n.y - t.y) + o * (a.y - 2 * n.y + t.y),
      o = r * e.x + i * t.x,
      e = r * e.y + i * t.y,
      t = r * n.x + i * a.x,
      i = r * n.y + i * a.y,
      a = 90 - 180 * Math.atan2(c - s, u - l) / Math.PI;
      return {
          x: h,
          y: p,
          fromP2: {
              x: c,
              y: u
          },
          toP1: {
              x: s,
              y: l
          },
          fromP1: {
              x: o,
              y: e
          },
          toP2: {
              x: t,
              y: i
          },
          angle: a += 180 < a ? -180 : 180
      }
  }
  function Te(n, a, i, o, e) {
      function l(e, t, n, a, i) {
          return e * (e * ( - 3 * t + 9 * n - 9 * a + 3 * i) + 6 * t - 12 * n + 6 * a) - 3 * t + 3 * n
      }
      var r, s, u = [.2491, .2491, .2335, .2335, .2032, .2032, .1601, .1601, .1069, .1069, .0472, .0472],
      h = 0,
      p = (e = null == e || 1 < e ? 1 : e < 0 ? 0 : e) / 2;
      return [ - .1252, .1252, -.3678, .3678, -.5873, .5873, -.7699, .7699, -.9041, .9041, -.9816, .9816].forEach(function(e, t) {
          r = l(s = p * e + p, n.x, a.x, i.x, o.x),
          s = l(s, n.y, a.y, i.y, o.y),
          s = r * r + s * s,
          h += u[t] * Math.sqrt(s)
      }),
      p * h
  }
  function We(e, t, n, a, i) {
      for (var o, l = .5,
      r = 1 - l; o = Te(e, t, n, a, r), !(Math.abs(o - i) <= .01);) r += (o < i ? 1 : -1) * (l /= 2);
      return r
  }
  function Be(e, t) {
      var n;
      return e.forEach(function(e) {
          e = t ? e.map(function(e) {
              e = {
                  x: e.x,
                  y: e.y
              };
              return t(e),
              e
          }) : e; (n = n || [{
              type: "M",
              values: [e[0].x, e[0].y]
          }]).push(e.length ? 2 === e.length ? {
              type: "L",
              values: [e[1].x, e[1].y]
          }: {
              type: "C",
              values: [e[1].x, e[1].y, e[2].x, e[2].y, e[3].x, e[3].y]
          }: {
              type: "Z",
              values: []
          })
      }),
      n
  }
  function Re(e) {
      var t = [],
      n = 0;
      return e.forEach(function(e) {
          e = (2 === e.length ? Ae: Te).apply(null, e);
          t.push(e),
          n += e
      }),
      {
          segsLen: t,
          lenAll: n
      }
  }
  function Fe(e, a) {
      return null == e || null == a || e.length !== a.length || e.some(function(e, t) {
          var n = a[t];
          return e.type !== n.type || e.values.some(function(e, t) {
              return e !== n.values[t]
          })
      })
  }
  function Ge(e, t, n) {
      e.events[t] ? e.events[t].indexOf(n) < 0 && e.events[t].push(n) : e.events[t] = [n]
  }
  function De(e, t, n) {
      var a;
      e.events[t] && -1 < (a = e.events[t].indexOf(n)) && e.events[t].splice(a, 1)
  }
  function ze(e) {
      t && clearTimeout(t),
      me.push(e),
      t = setTimeout(function() {
          me.forEach(function(e) {
              e()
          }),
          me = []
      },
      0)
  }
  function je(e, t) {
      e.reflowTargets.indexOf(t) < 0 && e.reflowTargets.push(t)
  }
  function He(e) {
      e.reflowTargets.forEach(function(e) {
          var n;
          n = e,
          setTimeout(function() {
              var e = n.parentNode,
              t = n.nextSibling;
              e.insertBefore(e.removeChild(n), t)
          },
          0)
      }),
      e.reflowTargets = []
  }
  function Ue(e, t, n, a, i, o, l) {
      var r;
      "auto-start-reverse" === n ? ("boolean" != typeof s && (t.setAttribute("orient", "auto-start-reverse"), s = t.orientType.baseVal === SVGMarkerElement.SVG_MARKER_ORIENT_UNKNOWN), s ? t.setAttribute("orient", n) : ((r = i.createSVGTransform()).setRotate(180, 0, 0), o.transform.baseVal.appendItem(r), t.setAttribute("orient", "auto"), r = !0)) : (t.setAttribute("orient", n), !1 === s && o.transform.baseVal.clear()),
      t = t.viewBox.baseVal,
      r ? (t.x = -a.right, t.y = -a.bottom) : (t.x = a.left, t.y = a.top),
      t.width = a.width,
      t.height = a.height,
      ie && je(e, l)
  }
  function Ze(e, t) {
      return {
          prop: e ? "markerEnd": "markerStart",
          orient: t ? t.noRotate ? "0": e ? "auto": "auto-start-reverse": null
      }
  }
  function Ye(n, a) {
      Object.keys(a).forEach(function(e) {
          var t = a[e];
          n[e] = null != t.iniValue ? t.hasSE ? [t.iniValue, t.iniValue] : t.iniValue: t.hasSE ? t.hasProps ? [{},
          {}] : [] : t.hasProps ? {}: null
      })
  }
  function Xe(t, e, n, a, i) {
      return a !== e[n] && (e[n] = a, i && i.forEach(function(e) {
          e(t, a, n)
      }), !0)
  }
  function qe(e) {
      function t(e, t) {
          return e + parseFloat(t)
      }
      var n = e.document,
      a = e.getComputedStyle(n.documentElement, ""),
      e = e.getComputedStyle(n.body, ""),
      n = {
          x: 0,
          y: 0
      };
      return "static" !== e.position ? (n.x -= [a.marginLeft, a.borderLeftWidth, a.paddingLeft, e.marginLeft, e.borderLeftWidth].reduce(t, 0), n.y -= [a.marginTop, a.borderTopWidth, a.paddingTop, e.marginTop, e.borderTopWidth].reduce(t, 0)) : "static" !== a.position && (n.x -= [a.marginLeft, a.borderLeftWidth].reduce(t, 0), n.y -= [a.marginTop, a.borderTopWidth].reduce(t, 0)),
      n
  }
  function Qe(e) {
      var t, n = e.document;
      n.getElementById(f) || (t = (new e.DOMParser).parseFromString(y, "image/svg+xml"), n.body.appendChild(t.documentElement), ce(e))
  }
  function Ke(l) {
      var g, c, _, e, n, a, i, d, o, r, s, t, u, h, p = l.options,
      f = l.curStats,
      y = l.aplStats,
      v = f.position_socketXYSE,
      m = !1;
      function S(e, t) {
          e = t === b ? {
              x: e.left + e.width / 2,
              y: e.top
          }: t === k ? {
              x: e.right,
              y: e.top + e.height / 2
          }: t === L ? {
              x: e.left + e.width / 2,
              y: e.bottom
          }: {
              x: e.left,
              y: e.top + e.height / 2
          };
          return e.socketId = t,
          e
      }
      function E(e) {
          return {
              x: e.x,
              y: e.y
          }
      }
      if (f.position_path = p.path, f.position_lineStrokeWidth = f.line_strokeWidth, f.position_socketGravitySE = g = we(p.socketGravitySE), c = [0, 1].map(function(e) {
          var t = p.anchorSE[e],
          n = l.optionIsAttach.anchorSE[e],
          a = !1 !== n ? _e[t._id] : null,
          i = !1 !== n && a.conf.getStrokeWidth ? a.conf.getStrokeWidth(a, l) : 0,
          o = !1 !== n && a.conf.getBBoxNest ? a.conf.getBBoxNest(a, l, i) : Le(t, l.baseWindow);
          return f.capsMaskAnchor_pathDataSE[e] = !1 !== n && a.conf.getPathData ? a.conf.getPathData(a, l, i) : (n = null != (t = o).right ? t.right: t.left + t.width, a = null != t.bottom ? t.bottom: t.top + t.height, [{
              type: "M",
              values: [t.left, t.top]
          },
          {
              type: "L",
              values: [n, t.top]
          },
          {
              type: "L",
              values: [n, a]
          },
          {
              type: "L",
              values: [t.left, a]
          },
          {
              type: "Z",
              values: []
          }]),
          f.capsMaskAnchor_strokeWidthSE[e] = i,
          o
      }), i = -1, p.socketSE[0] && p.socketSE[1] ? (v[0] = S(c[0], p.socketSE[0]), v[1] = S(c[1], p.socketSE[1])) : (p.socketSE[0] || p.socketSE[1] ? (a = p.socketSE[0] ? (n = 0, 1) : (n = 1, 0), v[n] = S(c[n], p.socketSE[n]), (e = G.map(function(e) {
          return S(c[a], e)
      })).forEach(function(e) {
          var t = Ae(e, v[n]); (t < i || -1 === i) && (v[a] = e, i = t)
      })) : (e = G.map(function(e) {
          return S(c[1], e)
      }), G.map(function(e) {
          return S(c[0], e)
      }).forEach(function(n) {
          e.forEach(function(e) {
              var t = Ae(n, e); (t < i || -1 === i) && (v[0] = n, v[1] = e, i = t)
          })
      })), [0, 1].forEach(function(e) {
          var t, n;
          p.socketSE[e] || (c[e].width || c[e].height ? c[e].width || v[e].socketId !== A && v[e].socketId !== k ? c[e].height || v[e].socketId !== b && v[e].socketId !== L || (v[e].socketId = 0 <= v[e ? 0 : 1].y - c[e].top ? L: b) : v[e].socketId = 0 <= v[e ? 0 : 1].x - c[e].left ? k: A: (t = v[e ? 0 : 1].x - c[e].left, n = v[e ? 0 : 1].y - c[e].top, v[e].socketId = Math.abs(t) >= Math.abs(n) ? 0 <= t ? k: A: 0 <= n ? L: b))
      })), f.position_path !== y.position_path || f.position_lineStrokeWidth !== y.position_lineStrokeWidth || [0, 1].some(function(e) {
          return f.position_plugOverheadSE[e] !== y.position_plugOverheadSE[e] || (t = v[e], n = y.position_socketXYSE[e], t.x !== n.x || t.y !== n.y || t.socketId !== n.socketId) || (t = g[e], n = y.position_socketGravitySE[e], (e = null == t ? "auto": Array.isArray(t) ? "array": "number") != (null == n ? "auto": Array.isArray(n) ? "array": "number") || ("array" == e ? t[0] !== n[0] || t[1] !== n[1] : t !== n));
          var t, n
      })) {
          switch (l.pathList.baseVal = _ = [], l.pathList.animVal = null, f.position_path) {
          case P:
              _.push([E(v[0]), E(v[1])]);
              break;
          case N:
              t = "number" == typeof g[0] && 0 < g[0] || "number" == typeof g[1] && 0 < g[1],
              u = ne * (t ? -1 : 1),
              h = Math.atan2(v[1].y - v[0].y, v[1].x - v[0].x),
              t = u - h,
              h = Math.PI - h - u,
              u = Ae(v[0], v[1]) / Math.sqrt(2) * te,
              t = {
                  x: v[0].x + Math.cos(t) * u,
                  y: v[0].y + Math.sin(t) * u * -1
              },
              u = {
                  x: v[1].x + Math.cos(h) * u,
                  y: v[1].y + Math.sin(h) * u * -1
              },
              _.push([E(v[0]), t, u, E(v[1])]);
              break;
          case T:
          case W:
              o = [g[0], f.position_path === W ? 0 : g[1]],
              r = [],
              s = [],
              v.forEach(function(e, t) {
                  var n, a = o[t],
                  i = Array.isArray(a) ? {
                      x: a[0],
                      y: a[1]
                  }: "number" == typeof a ? e.socketId === b ? {
                      x: 0,
                      y: -a
                  }: e.socketId === k ? {
                      x: a,
                      y: 0
                  }: e.socketId === L ? {
                      x: 0,
                      y: a
                  }: {
                      x: -a,
                      y: 0
                  }: (n = v[t ? 0 : 1], a = 0 < (a = f.position_plugOverheadSE[t]) ? U + (K < a ? (a - K) * J: 0) : z + (f.position_lineStrokeWidth > j ? (f.position_lineStrokeWidth - j) * H: 0), e.socketId === b ? {
                      x: 0,
                      y: -(i = (i = (e.y - n.y) / 2) < a ? a: i)
                  }: e.socketId === k ? {
                      x: i = (i = (n.x - e.x) / 2) < a ? a: i,
                      y: 0
                  }: e.socketId === L ? {
                      x: 0,
                      y: i = (i = (n.y - e.y) / 2) < a ? a: i
                  }: {
                      x: -(i = (i = (e.x - n.x) / 2) < a ? a: i),
                      y: 0
                  });
                  r[t] = e.x + i.x,
                  s[t] = e.y + i.y
              }),
              _.push([E(v[0]), {
                  x: r[0],
                  y: s[0]
              },
              {
                  x: r[1],
                  y: s[1]
              },
              E(v[1])]);
              break;
          case B:
              !
              function() {
                  var n, i = 1,
                  l = 2,
                  r = 3,
                  o = 4,
                  s = [[], []],
                  u = [];
                  function h(e) {
                      return e === i ? r: e === l ? o: e === r ? i: l
                  }
                  function p(e) {
                      return e === l || e === o ? "x": "y"
                  }
                  function c(e, t, n) {
                      var a = {
                          x: e.x,
                          y: e.y
                      };
                      if (n) {
                          if (n === h(e.dirId)) throw new Error("Invalid dirId: " + n);
                          a.dirId = n
                      } else a.dirId = e.dirId;
                      return a.dirId === i ? a.y -= t: a.dirId === l ? a.x += t: a.dirId === r ? a.y += t: a.x -= t,
                      a
                  }
                  function d(e, t) {
                      return t.dirId === i ? e.y <= t.y: t.dirId === l ? e.x >= t.x: t.dirId === r ? e.y >= t.y: e.x <= t.x
                  }
                  function f(e, t) {
                      return t.dirId === i || t.dirId === r ? e.x === t.x: e.y === t.y
                  }
                  function y(e) {
                      return e[0] ? {
                          contain: 0,
                          notContain: 1
                      }: {
                          contain: 1,
                          notContain: 0
                      }
                  }
                  function m(e, t, n) {
                      return Math.abs(t[n] - e[n])
                  }
                  function S(e, t, n) {
                      return "x" === n ? e.x < t.x ? l: o: e.y < t.y ? r: i
                  }
                  for (v.forEach(function(e, t) {
                      var n = E(e),
                      a = g[t];
                      e = Array.isArray(a) ? a[0] < 0 ? [o, -a[0]] : 0 < a[0] ? [l, a[0]] : a[1] < 0 ? [i, -a[1]] : 0 < a[1] ? [r, a[1]] : [e.socketId, 0] : "number" != typeof a ? [e.socketId, ee] : 0 <= a ? [e.socketId, a] : [h(e.socketId), -a],
                      n.dirId = e[0],
                      a = e[1],
                      s[t].push(n),
                      u[t] = c(n, a)
                  });
                  function() {
                      var e, t, a, i, n = [d(u[1], u[0]), d(u[0], u[1])],
                      o = [p(u[0].dirId), p(u[1].dirId)];
                      if (o[0] === o[1]) {
                          if (n[0] && n[1]) return void(f(u[1], u[0]) || (u[0][o[0]] === u[1][o[1]] ? (s[0].push(u[0]), s[1].push(u[1])) : (e = u[0][o[0]] + (u[1][o[1]] - u[0][o[0]]) / 2, s[0].push(c(u[0], Math.abs(e - u[0][o[0]]))), s[1].push(c(u[1], Math.abs(e - u[1][o[1]]))))));
                          n[0] !== n[1] ? (t = y(n), (a = m(u[t.notContain], u[t.contain], o[t.notContain])) < ee && (u[t.notContain] = c(u[t.notContain], ee - a)), s[t.notContain].push(u[t.notContain]), u[t.notContain] = c(u[t.notContain], ee, f(u[t.contain], u[t.notContain]) ? "x" === o[t.notContain] ? r: l: S(u[t.notContain], u[t.contain], "x" === o[t.notContain] ? "y": "x"))) : (a = m(u[0], u[1], "x" === o[0] ? "y": "x"), s.forEach(function(e, t) {
                              var n = 0 === t ? 1 : 0;
                              e.push(u[t]),
                              u[t] = c(u[t], ee, 2 * ee <= a ? S(u[t], u[n], "x" === o[t] ? "y": "x") : "x" === o[t] ? r: l)
                          }))
                      } else {
                          if (n[0] && n[1]) return void(f(u[1], u[0]) ? s[1].push(u[1]) : f(u[0], u[1]) ? s[0].push(u[0]) : s[0].push("x" === o[0] ? {
                              x: u[1].x,
                              y: u[0].y
                          }: {
                              x: u[0].x,
                              y: u[1].y
                          }));
                          n[0] !== n[1] ? (t = y(n), s[t.notContain].push(u[t.notContain]), u[t.notContain] = c(u[t.notContain], ee, m(u[t.notContain], u[t.contain], o[t.contain]) >= ee ? S(u[t.notContain], u[t.contain], o[t.contain]) : u[t.contain].dirId)) : (i = [{
                              x: u[0].x,
                              y: u[0].y
                          },
                          {
                              x: u[1].x,
                              y: u[1].y
                          }], s.forEach(function(e, t) {
                              var n = 0 === t ? 1 : 0,
                              a = m(i[t], i[n], o[t]);
                              a < ee && (u[t] = c(u[t], ee - a)),
                              e.push(u[t]),
                              u[t] = c(u[t], ee, S(u[t], u[n], o[n]))
                          }))
                      }
                      return 1
                  } (););
                  s[1].reverse(),
                  s[0].concat(s[1]).forEach(function(e, t) {
                      e = {
                          x: e.x,
                          y: e.y
                      };
                      0 < t && _.push([n, e]),
                      n = e
                  })
              } ()
          }
          d = [],
          f.position_plugOverheadSE.forEach(function(e, t) {
              var n, a, i, o, l, r, s, u, h, p = !t;
              0 < e ? 2 === (n = _[a = p ? 0 : _.length - 1]).length ? (d[a] = d[a] || Ae.apply(null, n), d[a] > $ && (d[a] - e < $ && (e = d[a] - $), s = Ve(n[0], n[1], (p ? e: d[a] - e) / d[a]), _[a] = p ? [s, n[1]] : [n[0], s], d[a] -= e)) : (d[a] = d[a] || Te.apply(null, n), d[a] > $ && (d[a] - e < $ && (e = d[a] - $), s = Ne(n[0], n[1], n[2], n[3], We(n[0], n[1], n[2], n[3], p ? e: d[a] - e)), o = p ? (i = n[0], s.toP1) : (i = n[3], s.fromP2), l = Math.atan2(i.y - s.y, s.x - i.x), r = Ae(s, o), s.x = i.x + Math.cos(l) * e, s.y = i.y + Math.sin(l) * e * -1, o.x = s.x + Math.cos(l) * r, o.y = s.y + Math.sin(l) * r * -1, _[a] = p ? [s, s.toP1, s.toP2, n[3]] : [n[0], s.fromP1, s.fromP2, s], d[a] = null)) : e < 0 && (n = _[a = p ? 0 : _.length - 1], s = v[t].socketId, t = -c[t]["x" == (u = s === A || s === k ? "x": "y") ? "width": "height"], h = (e = e < t ? t: e) * (s === A || s === b ? -1 : 1), 2 === n.length ? n[p ? 0 : n.length - 1][u] += h: (p ? [0, 1] : [n.length - 2, n.length - 1]).forEach(function(e) {
                  n[e][u] += h
              }), d[a] = null)
          }),
          y.position_socketXYSE = we(v),
          y.position_plugOverheadSE = we(f.position_plugOverheadSE),
          y.position_path = f.position_path,
          y.position_lineStrokeWidth = f.position_lineStrokeWidth,
          y.position_socketGravitySE = we(g),
          m = !0,
          l.events.apl_position && l.events.apl_position.forEach(function(e) {
              e(l, _)
          })
      }
      return m
  }
  function Je(t, n) {
      n !== t.isShown && ( !! n != !!t.isShown && (t.svg.style.visibility = n ? "": "hidden"), t.isShown = n, t.events && t.events.svgShow && t.events.svgShow.forEach(function(e) {
          e(t, n)
      }))
  }
  function $e(e, t) {
      var n, a, h, p, c, d, f, i, o, l, r, s, u, y, m, S, g, _, v, E, x, b, k, w, O, M, I, C, L, A, V, P, N, T, W, B, R, F, G, D, z, j, H, U = {};
      t.line && (U.line = (i = (n = e).options, a = n.curStats, o = n.events, l = !1, l = Xe(n, a, "line_color", i.lineColor, o.cur_line_color) || l, l = Xe(n, a, "line_colorTra", Oe(a.line_color)[0] < 1) || l, l = Xe(n, a, "line_strokeWidth", i.lineSize, o.cur_line_strokeWidth) || l)),
      (t.plug || U.line) && (U.plug = (p = (h = e).options, c = h.curStats, d = h.events, f = !1, [0, 1].forEach(function(e) {
          var t, n, a, i, o, l, r, s, u = p.plugSE[e];
          f = Xe(h, c.plug_enabledSE, e, u !== Y) || f,
          f = Xe(h, c.plug_plugSE, e, u) || f,
          f = Xe(h, c.plug_colorSE, e, s = p.plugColorSE[e] || c.line_color, d.cur_plug_colorSE) || f,
          f = Xe(h, c.plug_colorTraSE, e, Oe(s)[0] < 1) || f,
          u !== Y && (i = n = (t = X[q[u]]).widthR * p.plugSizeSE[e], o = a = t.heightR * p.plugSizeSE[e], re && (i *= c.line_strokeWidth, o *= c.line_strokeWidth), f = Xe(h, c.plug_markerWidthSE, e, i) || f, f = Xe(h, c.plug_markerHeightSE, e, o) || f, c.capsMaskMarker_markerWidthSE[e] = n, c.capsMaskMarker_markerHeightSE[e] = a),
          c.plugOutline_plugSE[e] = c.capsMaskMarker_plugSE[e] = u,
          c.plug_enabledSE[e] ? (s = c.line_strokeWidth / ue.lineSize * p.plugSizeSE[e], c.position_plugOverheadSE[e] = t.overhead * s, c.viewBox_plugBCircleSE[e] = t.bCircle * s, l = t.sideLen * s, r = t.backLen * s) : (c.position_plugOverheadSE[e] = -c.line_strokeWidth / 2, c.viewBox_plugBCircleSE[e] = l = r = 0),
          Xe(h, c.attach_plugSideLenSE, e, l, d.cur_attach_plugSideLenSE),
          Xe(h, c.attach_plugBackLenSE, e, r, d.cur_attach_plugBackLenSE),
          c.capsMaskAnchor_enabledSE[e] = !c.plug_enabledSE[e]
      }), f = Xe(h, c, "plug_enabled", c.plug_enabledSE[0] || c.plug_enabledSE[1]) || f)),
      (t.lineOutline || U.line) && (U.lineOutline = (o = (i = e).options, l = i.curStats, k = !1, k = Xe(i, l, "lineOutline_enabled", o.lineOutlineEnabled) || k, k = Xe(i, l, "lineOutline_color", o.lineOutlineColor) || k, k = Xe(i, l, "lineOutline_colorTra", Oe(l.lineOutline_color)[0] < 1) || k, o = l.line_strokeWidth * o.lineOutlineSize, k = Xe(i, l, "lineOutline_strokeWidth", l.line_strokeWidth - 2 * o) || k, k = Xe(i, l, "lineOutline_inStrokeWidth", l.lineOutline_colorTra ? l.lineOutline_strokeWidth + 2 * se: l.line_strokeWidth - o) || k)),
      (t.plugOutline || U.line || U.plug || U.lineOutline) && (U.plugOutline = (s = (r = e).options, u = r.curStats, y = !1, [0, 1].forEach(function(e) {
          var t = u.plugOutline_plugSE[e],
          n = t !== Y ? X[q[t]] : null;
          y = Xe(r, u.plugOutline_enabledSE, e, s.plugOutlineEnabledSE[e] && u.plug_enabled && u.plug_enabledSE[e] && !!n && !!n.outlineBase) || y,
          y = Xe(r, u.plugOutline_colorSE, e, t = s.plugOutlineColorSE[e] || u.lineOutline_color) || y,
          y = Xe(r, u.plugOutline_colorTraSE, e, Oe(t)[0] < 1) || y,
          n && n.outlineBase && ((t = s.plugOutlineSizeSE[e]) > n.outlineMax && (t = n.outlineMax), t *= 2 * n.outlineBase, y = Xe(r, u.plugOutline_strokeWidthSE, e, t) || y, y = Xe(r, u.plugOutline_inStrokeWidthSE, e, u.plugOutline_colorTraSE[e] ? t - se / (u.line_strokeWidth / ue.lineSize) / s.plugSizeSE[e] * 2 : t / 2) || y)
      }), y)),
      (t.faces || U.line || U.plug || U.lineOutline || U.plugOutline) && (U.faces = (g = (m = e).curStats, _ = m.aplStats, v = m.events, E = !1, !g.line_altColor && Xe(m, _, "line_color", S = g.line_color, v.apl_line_color) && (m.lineFace.style.stroke = S, E = !0), Xe(m, _, "line_strokeWidth", S = g.line_strokeWidth, v.apl_line_strokeWidth) && (m.lineShape.style.strokeWidth = S + "px", E = !0, (oe || ie) && (je(m, m.lineShape), ie && (je(m, m.lineFace), je(m, m.lineMaskCaps)))), Xe(m, _, "lineOutline_enabled", S = g.lineOutline_enabled, v.apl_lineOutline_enabled) && (m.lineOutlineFace.style.display = S ? "inline": "none", E = !0), g.lineOutline_enabled && (Xe(m, _, "lineOutline_color", S = g.lineOutline_color, v.apl_lineOutline_color) && (m.lineOutlineFace.style.stroke = S, E = !0), Xe(m, _, "lineOutline_strokeWidth", S = g.lineOutline_strokeWidth, v.apl_lineOutline_strokeWidth) && (m.lineOutlineMaskShape.style.strokeWidth = S + "px", E = !0, ie && (je(m, m.lineOutlineMaskCaps), je(m, m.lineOutlineFace))), Xe(m, _, "lineOutline_inStrokeWidth", S = g.lineOutline_inStrokeWidth, v.apl_lineOutline_inStrokeWidth) && (m.lineMaskShape.style.strokeWidth = S + "px", E = !0, ie && (je(m, m.lineOutlineMaskCaps), je(m, m.lineOutlineFace)))), Xe(m, _, "plug_enabled", S = g.plug_enabled, v.apl_plug_enabled) && (m.plugsFace.style.display = S ? "inline": "none", E = !0), g.plug_enabled && [0, 1].forEach(function(n) {
          var e = g.plug_plugSE[n],
          t = e !== Y ? X[q[e]] : null,
          a = Ze(n, t);
          Xe(m, _.plug_enabledSE, n, S = g.plug_enabledSE[n], v.apl_plug_enabledSE) && (m.plugsFace.style[a.prop] = S ? "url(#" + m.plugMarkerIdSE[n] + ")": "none", E = !0),
          g.plug_enabledSE[n] && (Xe(m, _.plug_plugSE, n, e, v.apl_plug_plugSE) && (m.plugFaceSE[n].href.baseVal = "#" + t.elmId, Ue(m, m.plugMarkerSE[n], a.orient, t.bBox, m.svg, m.plugMarkerShapeSE[n], m.plugsFace), E = !0, oe && je(m, m.plugsFace)), Xe(m, _.plug_colorSE, n, S = g.plug_colorSE[n], v.apl_plug_colorSE) && (m.plugFaceSE[n].style.fill = S, E = !0, (le || re || ie) && !g.line_colorTra && je(m, ie ? m.lineMaskCaps: m.capsMaskLine)), ["markerWidth", "markerHeight"].forEach(function(e) {
              var t = "plug_" + e + "SE";
              Xe(m, _[t], n, S = g[t][n], v["apl_" + t]) && (m.plugMarkerSE[n][e].baseVal.value = S, E = !0)
          }), Xe(m, _.plugOutline_enabledSE, n, S = g.plugOutline_enabledSE[n], v.apl_plugOutline_enabledSE) && (S ? (m.plugFaceSE[n].style.mask = "url(#" + m.plugMaskIdSE[n] + ")", m.plugOutlineFaceSE[n].style.display = "inline") : (m.plugFaceSE[n].style.mask = "none", m.plugOutlineFaceSE[n].style.display = "none"), E = !0), g.plugOutline_enabledSE[n] && (Xe(m, _.plugOutline_plugSE, n, e, v.apl_plugOutline_plugSE) && (m.plugOutlineFaceSE[n].href.baseVal = m.plugMaskShapeSE[n].href.baseVal = m.plugOutlineMaskShapeSE[n].href.baseVal = "#" + t.elmId, [m.plugMaskSE[n], m.plugOutlineMaskSE[n]].forEach(function(e) {
              e.x.baseVal.value = t.bBox.left,
              e.y.baseVal.value = t.bBox.top,
              e.width.baseVal.value = t.bBox.width,
              e.height.baseVal.value = t.bBox.height
          }), E = !0), Xe(m, _.plugOutline_colorSE, n, S = g.plugOutline_colorSE[n], v.apl_plugOutline_colorSE) && (m.plugOutlineFaceSE[n].style.fill = S, E = !0, ie && (je(m, m.lineMaskCaps), je(m, m.lineOutlineMaskCaps))), Xe(m, _.plugOutline_strokeWidthSE, n, S = g.plugOutline_strokeWidthSE[n], v.apl_plugOutline_strokeWidthSE) && (m.plugOutlineMaskShapeSE[n].style.strokeWidth = S + "px", E = !0), Xe(m, _.plugOutline_inStrokeWidthSE, n, S = g.plugOutline_inStrokeWidthSE[n], v.apl_plugOutline_inStrokeWidthSE) && (m.plugMaskShapeSE[n].style.strokeWidth = S + "px", E = !0)))
      }), E)),
      (t.position || U.line || U.plug) && (U.position = Ke(e)),
      (t.path || U.position) && (U.path = (k = (x = e).curStats, I = x.aplStats, M = x.pathList.animVal || x.pathList.baseVal, w = k.path_edge, C = !1, M && (w.x1 = w.x2 = M[0][0].x, w.y1 = w.y2 = M[0][0].y, k.path_pathData = b = Be(M,
      function(e) {
          e.x < w.x1 && (w.x1 = e.x),
          e.y < w.y1 && (w.y1 = e.y),
          e.x > w.x2 && (w.x2 = e.x),
          e.y > w.y2 && (w.y2 = e.y)
      }), Fe(b, I.path_pathData) && (x.linePath.setPathData(b), I.path_pathData = b, C = !0, ie ? (je(x, x.plugsFace), je(x, x.lineMaskCaps)) : oe && je(x, x.linePath), x.events.apl_path && x.events.apl_path.forEach(function(e) {
          e(x, b)
      }))), C)),
      U.viewBox = (M = (O = e).curStats, I = O.aplStats, C = M.path_edge, L = M.viewBox_bBox, A = I.viewBox_bBox, V = O.svg.viewBox.baseVal, P = O.svg.style, N = !1, I = Math.max(M.line_strokeWidth / 2, M.viewBox_plugBCircleSE[0] || 0, M.viewBox_plugBCircleSE[1] || 0), T = {
          x1: C.x1 - I,
          y1: C.y1 - I,
          x2: C.x2 + I,
          y2: C.y2 + I
      },
      O.events.new_edge4viewBox && O.events.new_edge4viewBox.forEach(function(e) {
          e(O, T)
      }), L.x = M.lineMask_x = M.lineOutlineMask_x = M.maskBGRect_x = T.x1, L.y = M.lineMask_y = M.lineOutlineMask_y = M.maskBGRect_y = T.y1, L.width = T.x2 - T.x1, L.height = T.y2 - T.y1, ["x", "y", "width", "height"].forEach(function(e) {
        // console.log(2222222, e)
          var t; (t = L[e]) !== A[e] && (V[e] = A[e] = t, P[Q[e]] = t + ("x" === e || "y" === e ? O.bodyOffset[e] : 0) + "px", N = !0)
          console.log(333333, t, L, C)
      }), N),
      U.mask = (R = (W = e).curStats, F = W.aplStats, G = !1, R.plug_enabled ? [0, 1].forEach(function(e) {
          R.capsMaskMarker_enabledSE[e] = R.plug_enabledSE[e] && R.plug_colorTraSE[e] || R.plugOutline_enabledSE[e] && R.plugOutline_colorTraSE[e]
      }) : R.capsMaskMarker_enabledSE[0] = R.capsMaskMarker_enabledSE[1] = !1, R.capsMaskMarker_enabled = R.capsMaskMarker_enabledSE[0] || R.capsMaskMarker_enabledSE[1], R.lineMask_outlineMode = R.lineOutline_enabled, R.caps_enabled = R.capsMaskMarker_enabled || R.capsMaskAnchor_enabledSE[0] || R.capsMaskAnchor_enabledSE[1], R.lineMask_enabled = R.caps_enabled || R.lineMask_outlineMode, (R.lineMask_enabled && !R.lineMask_outlineMode || R.lineOutline_enabled) && ["x", "y"].forEach(function(e) {
          var t = "maskBGRect_" + e;
          Xe(W, F, t, B = R[t]) && (W.maskBGRect[e].baseVal.value = B, G = !0)
      }), Xe(W, F, "lineMask_enabled", B = R.lineMask_enabled) && (W.lineFace.style.mask = B ? "url(#" + W.lineMaskId + ")": "none", G = !0, re && je(W, W.lineMask)), R.lineMask_enabled && (Xe(W, F, "lineMask_outlineMode", B = R.lineMask_outlineMode) && (B ? (W.lineMaskBG.style.display = "none", W.lineMaskShape.style.display = "inline") : (W.lineMaskBG.style.display = "inline", W.lineMaskShape.style.display = "none"), G = !0), ["x", "y"].forEach(function(e) {
          var t = "lineMask_" + e;
          Xe(W, F, t, B = R[t]) && (W.lineMask[e].baseVal.value = B, G = !0)
      }), Xe(W, F, "caps_enabled", B = R.caps_enabled) && (W.lineMaskCaps.style.display = W.lineOutlineMaskCaps.style.display = B ? "inline": "none", G = !0, re && je(W, W.capsMaskLine)), R.caps_enabled && ([0, 1].forEach(function(e) {
          var t;
          Xe(W, F.capsMaskAnchor_enabledSE, e, B = R.capsMaskAnchor_enabledSE[e]) && (W.capsMaskAnchorSE[e].style.display = B ? "inline": "none", G = !0, re && je(W, W.lineMask)),
          R.capsMaskAnchor_enabledSE[e] && (Fe(t = R.capsMaskAnchor_pathDataSE[e], F.capsMaskAnchor_pathDataSE[e]) && (W.capsMaskAnchorSE[e].setPathData(t), F.capsMaskAnchor_pathDataSE[e] = t, G = !0), Xe(W, F.capsMaskAnchor_strokeWidthSE, e, B = R.capsMaskAnchor_strokeWidthSE[e]) && (W.capsMaskAnchorSE[e].style.strokeWidth = B + "px", G = !0))
      }), Xe(W, F, "capsMaskMarker_enabled", B = R.capsMaskMarker_enabled) && (W.capsMaskLine.style.display = B ? "inline": "none", G = !0), R.capsMaskMarker_enabled && [0, 1].forEach(function(n) {
          var e = R.capsMaskMarker_plugSE[n],
          t = e !== Y ? X[q[e]] : null,
          a = Ze(n, t);
          Xe(W, F.capsMaskMarker_enabledSE, n, B = R.capsMaskMarker_enabledSE[n]) && (W.capsMaskLine.style[a.prop] = B ? "url(#" + W.lineMaskMarkerIdSE[n] + ")": "none", G = !0),
          R.capsMaskMarker_enabledSE[n] && (Xe(W, F.capsMaskMarker_plugSE, n, e) && (W.capsMaskMarkerShapeSE[n].href.baseVal = "#" + t.elmId, Ue(W, W.capsMaskMarkerSE[n], a.orient, t.bBox, W.svg, W.capsMaskMarkerShapeSE[n], W.capsMaskLine), G = !0, oe && (je(W, W.capsMaskLine), je(W, W.lineFace))), ["markerWidth", "markerHeight"].forEach(function(e) {
              var t = "capsMaskMarker_" + e + "SE";
              Xe(W, F[t], n, B = R[t][n]) && (W.capsMaskMarkerSE[n][e].baseVal.value = B, G = !0)
          }))
      }))), R.lineOutline_enabled && ["x", "y"].forEach(function(e) {
          var t = "lineOutlineMask_" + e;
          Xe(W, F, t, B = R[t]) && (W.lineOutlineMask[e].baseVal.value = B, G = !0)
      }), G),
      t.effect && (j = (D = e).curStats, H = D.aplStats, Object.keys(Z).forEach(function(e) {
          var t = Z[e],
          n = e + "_enabled",
          a = e + "_options",
          e = j[a];
          Xe(D, H, n, z = j[n]) ? (z && (H[a] = we(e)), t[z ? "init": "remove"](D)) : z && ke(e, H[a]) && (t.remove(D), H[n] = !0, H[a] = we(e), t.init(D))
      })),
      (le || re) && U.line && !U.path && je(e, e.lineShape),
      le && U.plug && !U.line && je(e, e.plugsFace),
      He(e)
  }
  function et(e, t) {
      return {
          duration: (pe(e.duration) && 0 < e.duration ? e: t).duration,
          timing: g.validTiming(e.timing) ? e.timing: we(t.timing)
      }
  }
  function tt(e, t, n, a) {
      var i = e.curStats,
      o = e.aplStats,
      l = {};
      function r() { ["show_on", "show_effect", "show_animOptions"].forEach(function(e) {
              o[e] = i[e]
          })
      }
      i.show_on = t,
      n && w[n] && (i.show_effect = n, i.show_animOptions = et(he(a) ? a: {},
      w[n].defaultAnimOptions)),
      l.show_on = i.show_on !== o.show_on,
      l.show_effect = i.show_effect !== o.show_effect,
      l.show_animOptions = ke(i.show_animOptions, o.show_animOptions),
      l.show_effect || l.show_animOptions ? i.show_inAnim ? (n = l.show_effect ? w[o.show_effect].stop(e, !0, !0) : w[o.show_effect].stop(e), r(), w[o.show_effect].init(e, n)) : l.show_on && (o.show_effect && l.show_effect && w[o.show_effect].stop(e, !0, !0), r(), w[o.show_effect].init(e)) : l.show_on && (r(), w[o.show_effect].start(e))
  }
  function nt(e, t, n) {
      n = {
          props: e,
          optionName: n
      };
      return e.attachments.indexOf(t) < 0 && (!t.conf.bind || t.conf.bind(t, n)) && (e.attachments.push(t), t.boundTargets.push(n), 1)
  }
  function at(n, a, e) {
      var i = n.attachments.indexOf(a); - 1 < i && n.attachments.splice(i, 1),
      a.boundTargets.some(function(e, t) {
          return e.props === n && (a.conf.unbind && a.conf.unbind(a, e), i = t, !0)
      }) && (a.boundTargets.splice(i, 1), e || ze(function() {
          a.boundTargets.length || o(a)
      }))
  }
  function it(s, u) {
      var i, n, e, t, a, o, l, r, h, p, c, d, f, y, m, S = s.options,
      g = {};
      function _(e, t, n, a, i) {
          var o = {};
          return n ? null != a ? (o.container = e[n], o.key = a) : (o.container = e, o.key = n) : (o.container = e, o.key = t),
          o.
      default = i,
          o.acceptsAuto = null == o.
      default,
          o
      }
      function v(e, t, n, a, i, o, l) {
          var r, s, u, l = _(e, n, i, o, l);
          return null != t[n] && (s = (t[n] + "").toLowerCase()) && (l.acceptsAuto && s === D || (u = a[s])) && u !== l.container[l.key] && (l.container[l.key] = u, r = !0),
          null != l.container[l.key] || l.acceptsAuto || (l.container[l.key] = l.
      default, r = !0),
          r
      }
      function E(e, t, n, a, i, o, l, r, s) {
          var u, h, p, c, l = _(e, n, i, o, l);
          if (!a) {
              if (null == l.
          default) throw new Error("Invalid `type`: " + n);
              a = typeof l.
          default
          }
          return null != t[n] && (l.acceptsAuto && (t[n] + "").toLowerCase() === D || (p = h = t[n], ("number" === (c = a) ? pe(p) : typeof p === c) && (h = s && "string" === a && h ? h.trim() : h, 1) && (!r || r(h)))) && h !== l.container[l.key] && (l.container[l.key] = h, u = !0),
          null != l.container[l.key] || l.acceptsAuto || (l.container[l.key] = l.
      default, u = !0),
          u
      }
      if (u = u || {},
      ["start", "end"].forEach(function(e, t) {
          var n = u[e],
          a = !1;
          if (n && (Me(n) || (a = I(n, "anchor"))) && n !== S.anchorSE[t]) {
              if (!1 !== s.optionIsAttach.anchorSE[t] && at(s, _e[S.anchorSE[t]._id]), a && !nt(s, _e[n._id], e)) throw new Error("Can't bind attachment");
              S.anchorSE[t] = n,
              s.optionIsAttach.anchorSE[t] = a,
              i = g.position = !0
          }
      }), !S.anchorSE[0] || !S.anchorSE[1] || S.anchorSE[0] === S.anchorSE[1]) throw new Error("`start` and `end` are required.");
      function x(e) {
          var t = a.appendChild(y.createElementNS(ae, "mask"));
          return t.id = e,
          t.maskUnits.baseVal = SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE,
          [t.x, t.y, t.width, t.height].forEach(function(e) {
              e.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX, 0)
          }),
          t
      }
      function b(e) {
          var t = a.appendChild(y.createElementNS(ae, "marker"));
          return t.id = e,
          t.markerUnits.baseVal = SVGMarkerElement.SVG_MARKERUNITS_STROKEWIDTH,
          t.viewBox.baseVal || t.setAttribute("viewBox", "0 0 0 0"),
          t
      }
      function k(e) {
          return [e.width, e.height].forEach(function(e) {
              e.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 100)
          }),
          e
      }
      i && (c = function(e, t) {
          var n, a;
          if (! (e = Ce(e)) || !(n = Ce(t))) throw new Error("Cannot get frames.");
          return e.length && n.length && (e.reverse(), n.reverse(), e.some(function(t) {
              return n.some(function(e) {
                  return e === t && (a = e.contentWindow, !0)
              })
          })),
          a || window
      } (!1 !== s.optionIsAttach.anchorSE[0] ? _e[S.anchorSE[0]._id].element: S.anchorSE[0], !1 !== s.optionIsAttach.anchorSE[1] ? _e[S.anchorSE[1]._id].element: S.anchorSE[1])) !== s.baseWindow && (e = c, f = (n = s).aplStats, y = e.document, m = C + "-" + n._id, n.pathList = {},
      Ye(f, de), Object.keys(Z).forEach(function(e) {
          var t = e + "_enabled";
          f[t] && (Z[e].remove(n), f[t] = !1)
      }), n.baseWindow && n.svg && n.baseWindow.document.body.removeChild(n.svg), Qe(n.baseWindow = e), n.bodyOffset = qe(e), n.svg = t = y.createElementNS(ae, "svg"), t.className.baseVal = C, t.viewBox.baseVal || t.setAttribute("viewBox", "0 0 0 0"), n.defs = a = t.appendChild(y.createElementNS(ae, "defs")), n.linePath = l = a.appendChild(y.createElementNS(ae, "path")), l.id = r = m + "-line-path", l.className.baseVal = C + "-line-path", re && (l.style.fill = "none"), n.lineShape = l = a.appendChild(y.createElementNS(ae, "use")), l.id = h = m + "-line-shape", l.href.baseVal = "#" + r, (o = a.appendChild(y.createElementNS(ae, "g"))).id = p = m + "-caps", n.capsMaskAnchorSE = [0, 1].map(function() {
          var e = o.appendChild(y.createElementNS(ae, "path"));
          return e.className.baseVal = C + "-caps-mask-anchor",
          e
      }), n.lineMaskMarkerIdSE = [m + "-caps-mask-marker-0", m + "-caps-mask-marker-1"], n.capsMaskMarkerSE = [0, 1].map(function(e) {
          return b(n.lineMaskMarkerIdSE[e])
      }), n.capsMaskMarkerShapeSE = [0, 1].map(function(e) {
          e = n.capsMaskMarkerSE[e].appendChild(y.createElementNS(ae, "use"));
          return e.className.baseVal = C + "-caps-mask-marker-shape",
          e
      }), n.capsMaskLine = l = o.appendChild(y.createElementNS(ae, "use")), l.className.baseVal = C + "-caps-mask-line", l.href.baseVal = "#" + h, n.maskBGRect = l = k(a.appendChild(y.createElementNS(ae, "rect"))), l.id = c = m + "-mask-bg-rect", l.className.baseVal = C + "-mask-bg-rect", re && (l.style.fill = "white"), n.lineMask = k(x(n.lineMaskId = m + "-line-mask")), n.lineMaskBG = l = n.lineMask.appendChild(y.createElementNS(ae, "use")), l.href.baseVal = "#" + c, n.lineMaskShape = l = n.lineMask.appendChild(y.createElementNS(ae, "use")), l.className.baseVal = C + "-line-mask-shape", l.href.baseVal = "#" + r, l.style.display = "none", n.lineMaskCaps = l = n.lineMask.appendChild(y.createElementNS(ae, "use")), l.href.baseVal = "#" + p, n.lineOutlineMask = k(x(e = m + "-line-outline-mask")), (l = n.lineOutlineMask.appendChild(y.createElementNS(ae, "use"))).href.baseVal = "#" + c, n.lineOutlineMaskShape = l = n.lineOutlineMask.appendChild(y.createElementNS(ae, "use")), l.className.baseVal = C + "-line-outline-mask-shape", l.href.baseVal = "#" + r, n.lineOutlineMaskCaps = l = n.lineOutlineMask.appendChild(y.createElementNS(ae, "use")), l.href.baseVal = "#" + p, n.face = t.appendChild(y.createElementNS(ae, "g")), n.lineFace = l = n.face.appendChild(y.createElementNS(ae, "use")), l.href.baseVal = "#" + h, n.lineOutlineFace = l = n.face.appendChild(y.createElementNS(ae, "use")), l.href.baseVal = "#" + h, l.style.mask = "url(#" + e + ")", l.style.display = "none", n.plugMaskIdSE = [m + "-plug-mask-0", m + "-plug-mask-1"], n.plugMaskSE = [0, 1].map(function(e) {
          return x(n.plugMaskIdSE[e])
      }), n.plugMaskShapeSE = [0, 1].map(function(e) {
          e = n.plugMaskSE[e].appendChild(y.createElementNS(ae, "use"));
          return e.className.baseVal = C + "-plug-mask-shape",
          e
      }), d = [], n.plugOutlineMaskSE = [0, 1].map(function(e) {
          return x(d[e] = m + "-plug-outline-mask-" + e)
      }), n.plugOutlineMaskShapeSE = [0, 1].map(function(e) {
          e = n.plugOutlineMaskSE[e].appendChild(y.createElementNS(ae, "use"));
          return e.className.baseVal = C + "-plug-outline-mask-shape",
          e
      }), n.plugMarkerIdSE = [m + "-plug-marker-0", m + "-plug-marker-1"], n.plugMarkerSE = [0, 1].map(function(e) {
          e = b(n.plugMarkerIdSE[e]);
          return re && (e.markerUnits.baseVal = SVGMarkerElement.SVG_MARKERUNITS_USERSPACEONUSE),
          e
      }), n.plugMarkerShapeSE = [0, 1].map(function(e) {
          return n.plugMarkerSE[e].appendChild(y.createElementNS(ae, "g"))
      }), n.plugFaceSE = [0, 1].map(function(e) {
          return n.plugMarkerShapeSE[e].appendChild(y.createElementNS(ae, "use"))
      }), n.plugOutlineFaceSE = [0, 1].map(function(e) {
          var t = n.plugMarkerShapeSE[e].appendChild(y.createElementNS(ae, "use"));
          return t.style.mask = "url(#" + d[e] + ")",
          t.style.display = "none",
          t
      }), n.plugsFace = l = n.face.appendChild(y.createElementNS(ae, "use")), l.className.baseVal = C + "-plugs-face", l.href.baseVal = "#" + h, l.style.display = "none", n.curStats.show_inAnim ? (n.isShown = 1, w[f.show_effect].stop(n, !0)) : n.isShown || (t.style.visibility = "hidden"), y.body.appendChild(t), [0, 1, 2].forEach(function(e) {
          var t, e = n.options.labelSEM[e];
          e && I(e, "label") && (t = _e[e._id]).conf.initSvg && t.conf.initSvg(t, n)
      }), g.line = g.plug = g.lineOutline = g.plugOutline = g.faces = g.effect = !0),
      g.position = v(S, u, "path", R, null, null, ue.path) || g.position,
      g.position = v(S, u, "startSocket", V, "socketSE", 0) || g.position,
      g.position = v(S, u, "endSocket", V, "socketSE", 1) || g.position,
      [u.startSocketGravity, u.endSocketGravity].forEach(function(e, t) {
          var n, a, i = !1;
          null != e && (Array.isArray(e) ? pe(e[0]) && pe(e[1]) && (i = [e[0], e[1]], Array.isArray(S.socketGravitySE[t]) && (n = i, a = S.socketGravitySE[t], n.length === a.length && n.every(function(e, t) {
              return e === a[t]
          })) && (i = !1)) : ((e + "").toLowerCase() === D ? i = null: pe(e) && 0 <= e && (i = e), i === S.socketGravitySE[t] && (i = !1)), !1 !== i && (S.socketGravitySE[t] = i, g.position = !0))
      }),
      g.line = E(S, u, "color", null, "lineColor", null, ue.lineColor, null, !0) || g.line,
      g.line = E(S, u, "size", null, "lineSize", null, ue.lineSize,
      function(e) {
          return 0 < e
      }) || g.line,
      ["startPlug", "endPlug"].forEach(function(e, t) {
          g.plug = v(S, u, e, F, "plugSE", t, ue.plugSE[t]) || g.plug,
          g.plug = E(S, u, e + "Color", "string", "plugColorSE", t, null, null, !0) || g.plug,
          g.plug = E(S, u, e + "Size", null, "plugSizeSE", t, ue.plugSizeSE[t],
          function(e) {
              return 0 < e
          }) || g.plug
      }),
      g.lineOutline = E(S, u, "outline", null, "lineOutlineEnabled", null, ue.lineOutlineEnabled) || g.lineOutline,
      g.lineOutline = E(S, u, "outlineColor", null, "lineOutlineColor", null, ue.lineOutlineColor, null, !0) || g.lineOutline,
      g.lineOutline = E(S, u, "outlineSize", null, "lineOutlineSize", null, ue.lineOutlineSize,
      function(e) {
          return 0 < e && e <= .48
      }) || g.lineOutline,
      ["startPlugOutline", "endPlugOutline"].forEach(function(e, t) {
          g.plugOutline = E(S, u, e, null, "plugOutlineEnabledSE", t, ue.plugOutlineEnabledSE[t]) || g.plugOutline,
          g.plugOutline = E(S, u, e + "Color", "string", "plugOutlineColorSE", t, null, null, !0) || g.plugOutline,
          g.plugOutline = E(S, u, e + "Size", null, "plugOutlineSizeSE", t, ue.plugOutlineSizeSE[t],
          function(e) {
              return 1 <= e
          }) || g.plugOutline
      }),
      ["startLabel", "endLabel", "middleLabel"].forEach(function(e, t) {
          var n, a, i, o = u[e],
          l = S.labelSEM[t] && !s.optionIsAttach.labelSEM[t] ? _e[S.labelSEM[t]._id].text: S.labelSEM[t],
          r = !1;
          if ((n = "string" == typeof o) && (o = o.trim()), (n || o && (r = I(o, "label"))) && o !== l) {
              if (S.labelSEM[t] && (at(s, _e[S.labelSEM[t]._id]), S.labelSEM[t] = ""), o) {
                  if (r ? (a = _e[(i = o)._id]).boundTargets.slice().forEach(function(e) {
                      a.conf.removeOption(a, e)
                  }) : i = new M(O.captionLabel, [o]), !nt(s, _e[i._id], e)) throw new Error("Can't bind attachment");
                  S.labelSEM[t] = i
              }
              s.optionIsAttach.labelSEM[t] = r
          }
      }),
      Object.keys(Z).forEach(function(a) {
          var e, t, o = Z[a],
          n = a + "_enabled",
          i = a + "_options";
          function l(a) {
              var i = {};
              return o.optionsConf.forEach(function(e) {
                  var t = e[0],
                  n = e[3];
                  null == e[4] || i[n] || (i[n] = []),
                  ("function" == typeof t ? t: "id" === t ? v: E).apply(null, [i, a].concat(e.slice(1)))
              }),
              i
          }
          function r(e) {
              var t, n = a + "_animOptions";
              return e.hasOwnProperty("animation") ? he(e.animation) ? t = s.curStats[n] = et(e.animation, o.defaultAnimOptions) : (t = !!e.animation, s.curStats[n] = t ? et({},
              o.defaultAnimOptions) : null) : (t = !!o.defaultEnabled, s.curStats[n] = t ? et({},
              o.defaultAnimOptions) : null),
              t
          }
          u.hasOwnProperty(a) && (e = u[a], he(e) ? (s.curStats[n] = !0, t = s.curStats[i] = l(e), o.anim && (s.curStats[i].animation = r(e))) : (t = s.curStats[n] = !!e) && (s.curStats[i] = l({}), o.anim && (s.curStats[i].animation = r({}))), ke(t, S[a]) && (S[a] = t, g.effect = !0))
      }),
      $e(s, g)
  }
  function ot(e, t, n) {
      var a = {
          options: {
              anchorSE: [],
              socketSE: [],
              socketGravitySE: [],
              plugSE: [],
              plugColorSE: [],
              plugSizeSE: [],
              plugOutlineEnabledSE: [],
              plugOutlineColorSE: [],
              plugOutlineSizeSE: [],
              labelSEM: ["", "", ""]
          },
          optionIsAttach: {
              anchorSE: [!1, !1],
              labelSEM: [!1, !1, !1]
          },
          curStats: {},
          aplStats: {},
          attachments: [],
          events: {},
          reflowTargets: []
      };
      Ye(a.curStats, de),
      Ye(a.aplStats, de),
      Object.keys(Z).forEach(function(e) {
          var t = Z[e].stats;
          Ye(a.curStats, t),
          Ye(a.aplStats, t),
          a.options[e] = !1
      }),
      Ye(a.curStats, fe),
      Ye(a.aplStats, fe),
      a.curStats.show_effect = ye,
      a.curStats.show_animOptions = we(w[ye].defaultAnimOptions),
      Object.defineProperty(this, "_id", {
          value: ++ge
      }),
      a._id = this._id,
      Se[this._id] = a,
      1 === arguments.length && (n = e, e = null),
      n = n || {},
      (e || t) && (n = we(n), e && (n.start = e), t && (n.end = t)),
      a.isShown = a.aplStats.show_on = !n.hide,
      this.setOptions(n)
  }
  function lt(n) {
      return function(e) {
          var t = {};
          t[n] = e,
          this.setOptions(t)
      }
  }
  function rt(e, t) {
      var n, a = {
          conf: e,
          curStats: {},
          aplStats: {},
          boundTargets: []
      },
      i = {};
      e.argOptions.every(function(e) {
          return ! (!t.length || ("string" == typeof e.type ? typeof t[0] !== e.type: "function" != typeof e.type || !e.type(t[0]))) && (i[e.optionName] = t.shift(), !0)
      }),
      n = t.length && he(t[0]) ? we(t[0]) : {},
      Object.keys(i).forEach(function(e) {
          n[e] = i[e]
      }),
      e.stats && (Ye(a.curStats, e.stats), Ye(a.aplStats, e.stats)),
      Object.defineProperty(this, "_id", {
          value: ++ve
      }),
      Object.defineProperty(this, "isRemoved", {
          get: function() {
              return ! _e[this._id]
          }
      }),
      a._id = this._id,
      e.init && !e.init(a, n) || (_e[this._id] = a)
  }
  return Z = {
      dash: {
          stats: {
              dash_len: {},
              dash_gap: {},
              dash_maxOffset: {}
          },
          anim: !0,
          defaultAnimOptions: {
              duration: 1e3,
              timing: "linear"
          },
          optionsConf: [["type", "len", "number", null, null, null,
          function(e) {
              return 0 < e
          }], ["type", "gap", "number", null, null, null,
          function(e) {
              return 0 < e
          }]],
          init: function(e) {
              Ge(e, "apl_line_strokeWidth", Z.dash.update),
              e.lineFace.style.strokeDashoffset = 0,
              Z.dash.update(e)
          },
          remove: function(e) {
              var t = e.curStats;
              De(e, "apl_line_strokeWidth", Z.dash.update),
              t.dash_animId && (g.remove(t.dash_animId), t.dash_animId = null),
              e.lineFace.style.strokeDasharray = "none",
              e.lineFace.style.strokeDashoffset = 0,
              Ye(e.aplStats, Z.dash.stats)
          },
          update: function(t) {
              var e, n = t.curStats,
              a = t.aplStats,
              i = a.dash_options,
              o = !1;
              n.dash_len = i.len || 2 * a.line_strokeWidth,
              n.dash_gap = i.gap || a.line_strokeWidth,
              n.dash_maxOffset = n.dash_len + n.dash_gap,
              o = Xe(t, a, "dash_len", n.dash_len) || o,
              (o = Xe(t, a, "dash_gap", n.dash_gap) || o) && (t.lineFace.style.strokeDasharray = a.dash_len + "," + a.dash_gap),
              n.dash_animOptions ? (o = Xe(t, a, "dash_maxOffset", n.dash_maxOffset), a.dash_animOptions && (o || ke(n.dash_animOptions, a.dash_animOptions)) && (n.dash_animId && (e = g.stop(n.dash_animId), g.remove(n.dash_animId)), a.dash_animOptions = null), a.dash_animOptions || (n.dash_animId = g.add(function(e) {
                  return (1 - e) * a.dash_maxOffset + "px"
              },
              function(e) {
                  t.lineFace.style.strokeDashoffset = e
              },
              n.dash_animOptions.duration, 0, n.dash_animOptions.timing, !1, e), a.dash_animOptions = we(n.dash_animOptions))) : a.dash_animOptions && (n.dash_animId && (g.remove(n.dash_animId), n.dash_animId = null), t.lineFace.style.strokeDashoffset = 0, a.dash_animOptions = null)
          }
      },
      gradient: {
          stats: {
              gradient_colorSE: {
                  hasSE: !0
              },
              gradient_pointSE: {
                  hasSE: !0,
                  hasProps: !0
              }
          },
          optionsConf: [["type", "startColor", "string", "colorSE", 0, null, null, !0], ["type", "endColor", "string", "colorSE", 1, null, null, !0]],
          init: function(e) {
              var a = e.baseWindow.document,
              t = e.defs,
              n = C + "-" + e._id + "-gradient";
              e.efc_gradient_gradient = t = t.appendChild(a.createElementNS(ae, "linearGradient")),
              t.id = n,
              t.gradientUnits.baseVal = SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE,
              [t.x1, t.y1, t.x2, t.y2].forEach(function(e) {
                  e.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX, 0)
              }),
              e.efc_gradient_stopSE = [0, 1].map(function(t) {
                  var n = e.efc_gradient_gradient.appendChild(a.createElementNS(ae, "stop"));
                  try {
                      n.offset.baseVal = t
                  } catch(e) {
                      if (e.code !== DOMException.NO_MODIFICATION_ALLOWED_ERR) throw e;
                      n.setAttribute("offset", t)
                  }
                  return n
              }),
              Ge(e, "cur_plug_colorSE", Z.gradient.update),
              Ge(e, "apl_path", Z.gradient.update),
              e.curStats.line_altColor = !0,
              e.lineFace.style.stroke = "url(#" + n + ")",
              Z.gradient.update(e)
          },
          remove: function(e) {
              e.efc_gradient_gradient && (e.defs.removeChild(e.efc_gradient_gradient), e.efc_gradient_gradient = e.efc_gradient_stopSE = null),
              De(e, "cur_plug_colorSE", Z.gradient.update),
              De(e, "apl_path", Z.gradient.update),
              e.curStats.line_altColor = !1,
              e.lineFace.style.stroke = e.curStats.line_color,
              Ye(e.aplStats, Z.gradient.stats)
          },
          update: function(a) {
              var e, i = a.curStats,
              o = a.aplStats,
              t = o.gradient_options,
              n = a.pathList.animVal || a.pathList.baseVal; [0, 1].forEach(function(e) {
                  i.gradient_colorSE[e] = t.colorSE[e] || i.plug_colorSE[e]
              }),
              e = n[0][0],
              i.gradient_pointSE[0] = {
                  x: e.x,
                  y: e.y
              },
              e = (n = n[n.length - 1])[n.length - 1],
              i.gradient_pointSE[1] = {
                  x: e.x,
                  y: e.y
              },
              [0, 1].forEach(function(t) {
                  var n;
                  Xe(a, o.gradient_colorSE, t, n = i.gradient_colorSE[t]) && (re ? (n = Oe(n), a.efc_gradient_stopSE[t].style.stopColor = n[1], a.efc_gradient_stopSE[t].style.stopOpacity = n[0]) : a.efc_gradient_stopSE[t].style.stopColor = n),
                  ["x", "y"].forEach(function(e) { (n = i.gradient_pointSE[t][e]) !== o.gradient_pointSE[t][e] && (a.efc_gradient_gradient[e + (t + 1)].baseVal.value = o.gradient_pointSE[t][e] = n)
                  })
              })
          }
      },
      dropShadow: {
          stats: {
              dropShadow_dx: {},
              dropShadow_dy: {},
              dropShadow_blur: {},
              dropShadow_color: {},
              dropShadow_opacity: {},
              dropShadow_x: {},
              dropShadow_y: {}
          },
          optionsConf: [["type", "dx", null, null, null, 2], ["type", "dy", null, null, null, 4], ["type", "blur", null, null, null, 3,
          function(e) {
              return 0 <= e
          }], ["type", "color", null, null, null, "#000", null, !0], ["type", "opacity", null, null, null, .8,
          function(e) {
              return 0 <= e && e <= 1
          }]],
          init: function(t) {
              var e, n, a, i, o = t.baseWindow.document,
              l = t.defs,
              r = C + "-" + t._id + "-dropShadow",
              s = (e = o, n = r, i = {},
              "boolean" != typeof u && (u = !!window.SVGFEDropShadowElement && !re), i.elmsAppend = [i.elmFilter = o = e.createElementNS(ae, "filter")], o.filterUnits.baseVal = SVGUnitTypes.SVG_UNIT_TYPE_USERSPACEONUSE, o.x.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX, 0), o.y.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX, 0), o.width.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 100), o.height.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 100), o.id = n, u ? (i.elmOffset = i.elmBlur = a = o.appendChild(e.createElementNS(ae, "feDropShadow")), i.styleFlood = a.style) : (i.elmBlur = o.appendChild(e.createElementNS(ae, "feGaussianBlur")), i.elmOffset = a = o.appendChild(e.createElementNS(ae, "feOffset")), a.result.baseVal = "offsetblur", a = o.appendChild(e.createElementNS(ae, "feFlood")), i.styleFlood = a.style, (a = o.appendChild(e.createElementNS(ae, "feComposite"))).in2.baseVal = "offsetblur", a.operator.baseVal = SVGFECompositeElement.SVG_FECOMPOSITE_OPERATOR_IN, (a = o.appendChild(e.createElementNS(ae, "feMerge"))).appendChild(e.createElementNS(ae, "feMergeNode")), a.appendChild(e.createElementNS(ae, "feMergeNode")).in1.baseVal = "SourceGraphic"), i); ["elmFilter", "elmOffset", "elmBlur", "styleFlood", "elmsAppend"].forEach(function(e) {
                  t["efc_dropShadow_" + e] = s[e]
              }),
              s.elmsAppend.forEach(function(e) {
                  l.appendChild(e)
              }),
              t.face.setAttribute("filter", "url(#" + r + ")"),
              Ge(t, "new_edge4viewBox", Z.dropShadow.adjustEdge),
              Z.dropShadow.update(t)
          },
          remove: function(e) {
              var t = e.defs;
              e.efc_dropShadow_elmsAppend && (e.efc_dropShadow_elmsAppend.forEach(function(e) {
                  t.removeChild(e)
              }), e.efc_dropShadow_elmFilter = e.efc_dropShadow_elmOffset = e.efc_dropShadow_elmBlur = e.efc_dropShadow_styleFlood = e.efc_dropShadow_elmsAppend = null),
              De(e, "new_edge4viewBox", Z.dropShadow.adjustEdge),
              $e(e, {}),
              e.face.removeAttribute("filter"),
              Ye(e.aplStats, Z.dropShadow.stats)
          },
          update: function(e) {
              var t, n, a = e.curStats,
              i = e.aplStats,
              o = i.dropShadow_options;
              a.dropShadow_dx = t = o.dx,
              Xe(e, i, "dropShadow_dx", t) && (e.efc_dropShadow_elmOffset.dx.baseVal = t, n = !0),
              a.dropShadow_dy = t = o.dy,
              Xe(e, i, "dropShadow_dy", t) && (e.efc_dropShadow_elmOffset.dy.baseVal = t, n = !0),
              a.dropShadow_blur = t = o.blur,
              Xe(e, i, "dropShadow_blur", t) && (e.efc_dropShadow_elmBlur.setStdDeviation(t, t), n = !0),
              n && $e(e, {}),
              a.dropShadow_color = t = o.color,
              Xe(e, i, "dropShadow_color", t) && (e.efc_dropShadow_styleFlood.floodColor = t),
              a.dropShadow_opacity = t = o.opacity,
              Xe(e, i, "dropShadow_opacity", t) && (e.efc_dropShadow_styleFlood.floodOpacity = t)
          },
          adjustEdge: function(a, i) {
              var e, o = a.curStats,
              l = a.aplStats;
              null != o.dropShadow_dx && (e = 3 * o.dropShadow_blur, (e = {
                  x1: i.x1 - e + o.dropShadow_dx,
                  y1: i.y1 - e + o.dropShadow_dy,
                  x2: i.x2 + e + o.dropShadow_dx,
                  y2: i.y2 + e + o.dropShadow_dy
              }).x1 < i.x1 && (i.x1 = e.x1), e.y1 < i.y1 && (i.y1 = e.y1), e.x2 > i.x2 && (i.x2 = e.x2), e.y2 > i.y2 && (i.y2 = e.y2), ["x", "y"].forEach(function(e) {
                  var t, n = "dropShadow_" + e;
                  o[n] = t = i[e + "1"],
                  Xe(a, l, n, t) && (a.efc_dropShadow_elmFilter[e].baseVal.value = t)
              }))
          }
      }
  },
  Object.keys(Z).forEach(function(e) {
      var t = Z[e],
      n = t.stats;
      n[e + "_enabled"] = {
          iniValue: !1
      },
      n[e + "_options"] = {
          hasProps: !0
      },
      t.anim && (n[e + "_animOptions"] = {},
      n[e + "_animId"] = {})
  }),
  w = {
      none: {
          defaultAnimOptions: {},
          init: function(e, t) {
              var n = e.curStats;
              n.show_animId && (g.remove(n.show_animId), n.show_animId = null),
              w.none.start(e, t)
          },
          start: function(e, t) {
              w.none.stop(e, !0)
          },
          stop: function(e, t, n) {
              var a = e.curStats;
              return n = null != n ? n: e.aplStats.show_on,
              a.show_inAnim = !1,
              t && Je(e, n),
              n ? 1 : 0
          }
      },
      fade: {
          defaultAnimOptions: {
              duration: 300,
              timing: "linear"
          },
          init: function(n, e) {
              var t = n.curStats,
              a = n.aplStats;
              t.show_animId && g.remove(t.show_animId),
              t.show_animId = g.add(function(e) {
                  return e
              },
              function(e, t) {
                  t ? w.fade.stop(n, !0) : (n.svg.style.opacity = e + "", ie && (je(n, n.svg), He(n)))
              },
              a.show_animOptions.duration, 1, a.show_animOptions.timing, null, !1),
              w.fade.start(n, e)
          },
          start: function(e, t) {
              var n, a = e.curStats;
              a.show_inAnim && (n = g.stop(a.show_animId)),
              Je(e, 1),
              a.show_inAnim = !0,
              g.start(a.show_animId, !e.aplStats.show_on, null != t ? t: n)
          },
          stop: function(e, t, n) {
              var a, i = e.curStats;
              return n = null != n ? n: e.aplStats.show_on,
              a = i.show_inAnim ? g.stop(i.show_animId) : n ? 1 : 0,
              i.show_inAnim = !1,
              t && (e.svg.style.opacity = n ? "": "0", Je(e, n)),
              a
          }
      },
      draw: {
          defaultAnimOptions: {
              duration: 500,
              timing: [.58, 0, .42, 1]
          },
          init: function(n, e) {
              var t = n.curStats,
              a = n.aplStats,
              o = n.pathList.baseVal,
              i = Re(o),
              l = i.segsLen,
              r = i.lenAll;
              t.show_animId && g.remove(t.show_animId),
              t.show_animId = g.add(function(e) {
                  var t, n, a, i = -1;
                  if (0 === e) n = [[o[0][0], o[0][0]]];
                  else if (1 === e) n = o;
                  else {
                      for (t = r * e, n = []; t >= l[++i];) n.push(o[i]),
                      t -= l[i];
                      t && (2 === (a = o[i]).length ? n.push([a[0], Ve(a[0], a[1], t / l[i])]) : (e = Ne(a[0], a[1], a[2], a[3], We(a[0], a[1], a[2], a[3], t)), n.push([a[0], e.fromP1, e.fromP2, e])))
                  }
                  return n
              },
              function(e, t) {
                  t ? w.draw.stop(n, !0) : (n.pathList.animVal = e, $e(n, {
                      path: !0
                  }))
              },
              a.show_animOptions.duration, 1, a.show_animOptions.timing, null, !1),
              w.draw.start(n, e)
          },
          start: function(e, t) {
              var n, a = e.curStats;
              a.show_inAnim && (n = g.stop(a.show_animId)),
              Je(e, 1),
              a.show_inAnim = !0,
              Ge(e, "apl_position", w.draw.update),
              g.start(a.show_animId, !e.aplStats.show_on, null != t ? t: n)
          },
          stop: function(e, t, n) {
              var a, i = e.curStats;
              return n = null != n ? n: e.aplStats.show_on,
              a = i.show_inAnim ? g.stop(i.show_animId) : n ? 1 : 0,
              i.show_inAnim = !1,
              t && (e.pathList.animVal = n ? null: [[e.pathList.baseVal[0][0], e.pathList.baseVal[0][0]]], $e(e, {
                  path: !0
              }), Je(e, n)),
              a
          },
          update: function(e) {
              De(e, "apl_position", w.draw.update),
              e.curStats.show_inAnim ? w.draw.init(e, w.draw.stop(e)) : e.aplStats.show_animOptions = {}
          }
      }
  },
  [["start", "anchorSE", 0], ["end", "anchorSE", 1], ["color", "lineColor"], ["size", "lineSize"], ["startSocketGravity", "socketGravitySE", 0], ["endSocketGravity", "socketGravitySE", 1], ["startPlugColor", "plugColorSE", 0], ["endPlugColor", "plugColorSE", 1], ["startPlugSize", "plugSizeSE", 0], ["endPlugSize", "plugSizeSE", 1], ["outline", "lineOutlineEnabled"], ["outlineColor", "lineOutlineColor"], ["outlineSize", "lineOutlineSize"], ["startPlugOutline", "plugOutlineEnabledSE", 0], ["endPlugOutline", "plugOutlineEnabledSE", 1], ["startPlugOutlineColor", "plugOutlineColorSE", 0], ["endPlugOutlineColor", "plugOutlineColorSE", 1], ["startPlugOutlineSize", "plugOutlineSizeSE", 0], ["endPlugOutlineSize", "plugOutlineSizeSE", 1]].forEach(function(e) {
      var t = e[0],
      n = e[1],
      a = e[2];
      Object.defineProperty(ot.prototype, t, {
          get: function() {
              var e = null != a ? Se[this._id].options[n][a] : n ? Se[this._id].options[n] : Se[this._id].options[t];
              return null == e ? D: we(e)
          },
          set: lt(t),
          enumerable: !0
      })
  }),
  [["path", R], ["startSocket", V, "socketSE", 0], ["endSocket", V, "socketSE", 1], ["startPlug", F, "plugSE", 0], ["endPlug", F, "plugSE", 1]].forEach(function(e) {
      var a = e[0],
      i = e[1],
      o = e[2],
      l = e[3];
      Object.defineProperty(ot.prototype, a, {
          get: function() {
              var t, n = null != l ? Se[this._id].options[o][l] : o ? Se[this._id].options[o] : Se[this._id].options[a];
              return n ? Object.keys(i).some(function(e) {
                  return i[e] === n && (t = e, !0)
              }) ? t: new Error("It's broken") : D
          },
          set: lt(a),
          enumerable: !0
      })
  }),
  Object.keys(Z).forEach(function(n) {
      var a = Z[n];
      Object.defineProperty(ot.prototype, n, {
          get: function() {
              var s, e, t = Se[this._id].options[n];
              return he(t) ? (s = t, e = a.optionsConf.reduce(function(e, t) {
                  var n, a = t[0],
                  i = t[1],
                  o = t[2],
                  l = t[3],
                  t = t[4],
                  r = null != t ? s[l][t] : l ? s[l] : s[i];
                  return e[i] = "id" === a ? r ? Object.keys(o).some(function(e) {
                      return o[e] === r && (n = e, !0)
                  }) ? n: new Error("It's broken") : D: null == r ? D: we(r),
                  e
              },
              {}), a.anim && (e.animation = we(s.animation)), e) : t
          },
          set: lt(n),
          enumerable: !0
      })
  }),
  ["startLabel", "endLabel", "middleLabel"].forEach(function(e, n) {
      Object.defineProperty(ot.prototype, e, {
          get: function() {
              var e = Se[this._id],
              t = e.options;
              return t.labelSEM[n] && !e.optionIsAttach.labelSEM[n] ? _e[t.labelSEM[n]._id].text: t.labelSEM[n] || ""
          },
          set: lt(e),
          enumerable: !0
      })
  }),
  ot.prototype.setOptions = function(e) {
      return it(Se[this._id], e),
      this
  },
  ot.prototype.position = function() {
      return $e(Se[this._id], {
          position: !0
      }),
      this
  },
  ot.prototype.remove = function() {
      var t = Se[this._id],
      n = t.curStats;
      Object.keys(Z).forEach(function(e) {
          e += "_animId";
          n[e] && g.remove(n[e])
      }),
      n.show_animId && g.remove(n.show_animId),
      t.attachments.slice().forEach(function(e) {
          at(t, e)
      }),
      t.baseWindow && t.svg && t.baseWindow.document.body.removeChild(t.svg),
      delete Se[this._id]
  },
  ot.prototype.show = function(e, t) {
      return tt(Se[this._id], !0, e, t),
      this
  },
  ot.prototype.hide = function(e, t) {
      return tt(Se[this._id], !1, e, t),
      this
  },
  o = function(t) {
      t && _e[t._id] && (t.boundTargets.slice().forEach(function(e) {
          at(e.props, t, !0)
      }), t.conf.remove && t.conf.remove(t), delete _e[t._id])
  },
  rt.prototype.remove = function() {
      var t = this,
      n = _e[t._id];
      n && (n.boundTargets.slice().forEach(function(e) {
          n.conf.removeOption(n, e)
      }), ze(function() {
          var e = _e[t._id];
          e && (console.error("LeaderLineAttachment was not removed by removeOption"), o(e))
      }))
  },
  M = rt,
  window.LeaderLineAttachment = M,
  I = function(e, t) {
      return e instanceof M && (!(e.isRemoved || t && _e[e._id].conf.type !== t) || null)
  },
  O = {
      pointAnchor: {
          type: "anchor",
          argOptions: [{
              optionName: "element",
              type: Me
          }],
          init: function(e, t) {
              return e.element = O.pointAnchor.checkElement(t.element),
              e.x = O.pointAnchor.parsePercent(t.x, !0) || [.5, !0],
              e.y = O.pointAnchor.parsePercent(t.y, !0) || [.5, !0],
              !0
          },
          removeOption: function(e, t) {
              var n = t.props,
              a = {},
              i = e.element,
              e = n.options.anchorSE["start" === t.optionName ? 1 : 0];
              i === e && (i = e === document.body ? new M(O.pointAnchor, [i]) : document.body),
              a[t.optionName] = i,
              it(n, a)
          },
          getBBoxNest: function(e, t) {
              var n = Le(e.element, t.baseWindow),
              a = n.width,
              t = n.height;
              return n.width = n.height = 0,
              n.left = n.right = n.left + e.x[0] * (e.x[1] ? a: 1),
              n.top = n.bottom = n.top + e.y[0] * (e.y[1] ? t: 1),
              n
          },
          parsePercent: function(e, t) {
              var n, a, i = !1;
              return pe(e) ? a = e: "string" == typeof e && (n = m.exec(e)) && n[2] && (i = 0 !== (a = parseFloat(n[1]) / 100)),
              null != a && (t || 0 <= a) ? [a, i] : null
          },
          checkElement: function(e) {
              if (null == e) e = document.body;
              else if (!Me(e)) throw new Error("`element` must be Element");
              return e
          }
      },
      areaAnchor: {
          type: "anchor",
          argOptions: [{
              optionName: "element",
              type: Me
          },
          {
              optionName: "shape",
              type: "string"
          }],
          stats: {
              color: {},
              strokeWidth: {},
              elementWidth: {},
              elementHeight: {},
              elementLeft: {},
              elementTop: {},
              pathListRel: {},
              bBoxRel: {},
              pathData: {},
              viewBoxBBox: {
                  hasProps: !0
              },
              dashLen: {},
              dashGap: {}
          },
          init: function(a, e) {
              var t, n = [];
              return a.element = O.pointAnchor.checkElement(e.element),
              "string" == typeof e.color && (a.color = e.color.trim()),
              "string" == typeof e.fillColor && (a.fill = e.fillColor.trim()),
              pe(e.size) && 0 <= e.size && (a.size = e.size),
              e.dash && (a.dash = !0, pe(e.dash.len) && 0 < e.dash.len && (a.dashLen = e.dash.len), pe(e.dash.gap) && 0 < e.dash.gap && (a.dashGap = e.dash.gap)),
              "circle" === e.shape ? a.shape = e.shape: "polygon" === e.shape && Array.isArray(e.points) && 3 <= e.points.length && e.points.every(function(e) {
                  var t = {};
                  return ! (! (t.x = O.pointAnchor.parsePercent(e[0], !0)) || !(t.y = O.pointAnchor.parsePercent(e[1], !0))) && (n.push(t), (t.x[1] || t.y[1]) && (a.hasRatio = !0), !0)
              }) ? (a.shape = e.shape, a.points = n) : (a.shape = "rect", a.radius = pe(e.radius) && 0 <= e.radius ? e.radius: 0),
              "rect" !== a.shape && "circle" !== a.shape || (a.x = O.pointAnchor.parsePercent(e.x, !0) || [ - .05, !0], a.y = O.pointAnchor.parsePercent(e.y, !0) || [ - .05, !0], a.width = O.pointAnchor.parsePercent(e.width) || [1.1, !0], a.height = O.pointAnchor.parsePercent(e.height) || [1.1, !0], (a.x[1] || a.y[1] || a.width[1] || a.height[1]) && (a.hasRatio = !0)),
              t = a.element.ownerDocument,
              a.svg = e = t.createElementNS(ae, "svg"),
              e.className.baseVal = C + "-areaAnchor",
              e.viewBox.baseVal || e.setAttribute("viewBox", "0 0 0 0"),
              a.path = e.appendChild(t.createElementNS(ae, "path")),
              a.path.style.fill = a.fill || "none",
              a.isShown = !1,
              e.style.visibility = "hidden",
              t.body.appendChild(e),
              Qe(t = t.defaultView),
              a.bodyOffset = qe(t),
              a.updateColor = function() {
                  var e = a.curStats,
                  t = a.aplStats,
                  n = a.boundTargets.length ? a.boundTargets[0].props.curStats: null;
                  e.color = n = a.color || (n ? n.line_color: ue.lineColor),
                  Xe(a, t, "color", n) && (a.path.style.stroke = n)
              },
              a.updateShow = function() {
                  Je(a, a.boundTargets.some(function(e) {
                      return ! 0 === e.props.isShown
                  }))
              },
              !0
          },
          bind: function(e, t) {
              t = t.props;
              return e.color || Ge(t, "cur_line_color", e.updateColor),
              Ge(t, "svgShow", e.updateShow),
              ze(function() {
                  e.updateColor(),
                  e.updateShow()
              }),
              !0
          },
          unbind: function(e, t) {
              t = t.props;
              e.color || De(t, "cur_line_color", e.updateColor),
              De(t, "svgShow", e.updateShow),
              1 < e.boundTargets.length && ze(function() {
                  e.updateColor(),
                  e.updateShow(),
                  O.areaAnchor.update(e) && e.boundTargets.forEach(function(e) {
                      $e(e.props, {
                          position: !0
                      })
                  })
              })
          },
          removeOption: function(e, t) {
              O.pointAnchor.removeOption(e, t)
          },
          remove: function(t) {
              t.boundTargets.length && (console.error("LeaderLineAttachment was not unbound by remove"), t.boundTargets.forEach(function(e) {
                  O.areaAnchor.unbind(t, e)
              })),
              t.svg.parentNode.removeChild(t.svg)
          },
          getStrokeWidth: function(e, t) {
              return O.areaAnchor.update(e) && 1 < e.boundTargets.length && ze(function() {
                  e.boundTargets.forEach(function(e) {
                      e.props !== t && $e(e.props, {
                          position: !0
                      })
                  })
              }),
              e.curStats.strokeWidth
          },
          getPathData: function(e, t) {
              var n = Le(e.element, t.baseWindow);
              return Be(e.curStats.pathListRel,
              function(e) {
                  e.x += n.left,
                  e.y += n.top
              })
          },
          getBBoxNest: function(e, t) {
              t = Le(e.element, t.baseWindow),
              e = e.curStats.bBoxRel;
              return {
                  left: e.left + t.left,
                  top: e.top + t.top,
                  right: e.right + t.left,
                  bottom: e.bottom + t.top,
                  width: e.width,
                  height: e.height
              }
          },
          update: function(t) {
              var n, a, i, o, e, l, r, s, u, h, p, c, d, f, y, m, S = t.curStats,
              g = t.aplStats,
              _ = t.boundTargets.length ? t.boundTargets[0].props.curStats: null,
              v = {};
              if (v.strokeWidth = Xe(t, S, "strokeWidth", null != t.size ? t.size: _ ? _.line_strokeWidth: ue.lineSize), n = Ie(t.element), v.elementWidth = Xe(t, S, "elementWidth", n.width), v.elementHeight = Xe(t, S, "elementHeight", n.height), v.elementLeft = Xe(t, S, "elementLeft", n.left), v.elementTop = Xe(t, S, "elementTop", n.top), v.strokeWidth || t.hasRatio && (v.elementWidth || v.elementHeight)) {
                  switch (t.shape) {
                  case "rect":
                      (c = {
                          left: t.x[0] * (t.x[1] ? n.width: 1),
                          top: t.y[0] * (t.y[1] ? n.height: 1),
                          width: t.width[0] * (t.width[1] ? n.width: 1),
                          height: t.height[0] * (t.height[1] ? n.height: 1)
                      }).right = c.left + c.width,
                      c.bottom = c.top + c.height,
                      p = S.strokeWidth / 2,
                      s = (r = Math.min(c.width, c.height)) ? r / 2 * Math.SQRT2 + p: 0,
                      h = (r = t.radius ? t.radius <= s ? t.radius: s: 0) ? (s = (r - p) / Math.SQRT2, h = [{
                          x: c.left - (u = r - s),
                          y: c.top + s
                      },
                      {
                          x: c.left + s,
                          y: c.top - u
                      },
                      {
                          x: c.right - s,
                          y: c.top - u
                      },
                      {
                          x: c.right + u,
                          y: c.top + s
                      },
                      {
                          x: c.right + u,
                          y: c.bottom - s
                      },
                      {
                          x: c.right - s,
                          y: c.bottom + u
                      },
                      {
                          x: c.left + s,
                          y: c.bottom + u
                      },
                      {
                          x: c.left - u,
                          y: c.bottom - s
                      }], S.pathListRel = [[h[0], {
                          x: h[0].x,
                          y: h[0].y - (p = r * te)
                      },
                      {
                          x: h[1].x - p,
                          y: h[1].y
                      },
                      h[1]]], h[1].x !== h[2].x && S.pathListRel.push([h[1], h[2]]), S.pathListRel.push([h[2], {
                          x: h[2].x + p,
                          y: h[2].y
                      },
                      {
                          x: h[3].x,
                          y: h[3].y - p
                      },
                      h[3]]), h[3].y !== h[4].y && S.pathListRel.push([h[3], h[4]]), S.pathListRel.push([h[4], {
                          x: h[4].x,
                          y: h[4].y + p
                      },
                      {
                          x: h[5].x + p,
                          y: h[5].y
                      },
                      h[5]]), h[5].x !== h[6].x && S.pathListRel.push([h[5], h[6]]), S.pathListRel.push([h[6], {
                          x: h[6].x - p,
                          y: h[6].y
                      },
                      {
                          x: h[7].x,
                          y: h[7].y + p
                      },
                      h[7]]), h[7].y !== h[0].y && S.pathListRel.push([h[7], h[0]]), S.pathListRel.push([]), u = r - s + S.strokeWidth / 2, [{
                          x: c.left - u,
                          y: c.top - u
                      },
                      {
                          x: c.right + u,
                          y: c.bottom + u
                      }]) : (u = S.strokeWidth / 2, h = [{
                          x: c.left - u,
                          y: c.top - u
                      },
                      {
                          x: c.right + u,
                          y: c.bottom + u
                      }], S.pathListRel = [[h[0], {
                          x: h[1].x,
                          y: h[0].y
                      }], [{
                          x: h[1].x,
                          y: h[0].y
                      },
                      h[1]], [h[1], {
                          x: h[0].x,
                          y: h[1].y
                      }], []], [{
                          x: c.left - S.strokeWidth,
                          y: c.top - S.strokeWidth
                      },
                      {
                          x: c.right + S.strokeWidth,
                          y: c.bottom + S.strokeWidth
                      }]),
                      S.bBoxRel = {
                          left: h[0].x,
                          top: h[0].y,
                          right: h[1].x,
                          bottom: h[1].y,
                          width: h[1].x - h[0].x,
                          height: h[1].y - h[0].y
                      };
                      break;
                  case "circle":
                      (l = {
                          left: t.x[0] * (t.x[1] ? n.width: 1),
                          top: t.y[0] * (t.y[1] ? n.height: 1),
                          width: t.width[0] * (t.width[1] ? n.width: 1),
                          height: t.height[0] * (t.height[1] ? n.height: 1)
                      }).width || l.height || (l.width = l.height = 10),
                      l.width || (l.width = l.height),
                      l.height || (l.height = l.width),
                      l.right = l.left + l.width,
                      l.bottom = l.top + l.height,
                      p = l.left + l.width / 2,
                      r = l.top + l.height / 2,
                      e = S.strokeWidth / 2,
                      s = l.width / 2,
                      u = l.height / 2,
                      c = s * Math.SQRT2 + e,
                      h = u * Math.SQRT2 + e,
                      S.pathListRel = [[(e = [{
                          x: p - c,
                          y: r
                      },
                      {
                          x: p,
                          y: r - h
                      },
                      {
                          x: p + c,
                          y: r
                      },
                      {
                          x: p,
                          y: r + h
                      }])[0], {
                          x: e[0].x,
                          y: e[0].y - (p = h * te)
                      },
                      {
                          x: e[1].x - (r = c * te),
                          y: e[1].y
                      },
                      e[1]], [e[1], {
                          x: e[1].x + r,
                          y: e[1].y
                      },
                      {
                          x: e[2].x,
                          y: e[2].y - p
                      },
                      e[2]], [e[2], {
                          x: e[2].x,
                          y: e[2].y + p
                      },
                      {
                          x: e[3].x + r,
                          y: e[3].y
                      },
                      e[3]], [e[3], {
                          x: e[3].x - r,
                          y: e[3].y
                      },
                      {
                          x: e[0].x,
                          y: e[0].y + p
                      },
                      e[0]], []],
                      s = c - s + S.strokeWidth / 2,
                      u = h - u + S.strokeWidth / 2,
                      e = [{
                          x: l.left - s,
                          y: l.top - u
                      },
                      {
                          x: l.right + s,
                          y: l.bottom + u
                      }],
                      S.bBoxRel = {
                          left: e[0].x,
                          top: e[0].y,
                          right: e[1].x,
                          bottom: e[1].y,
                          width: e[1].x - e[0].x,
                          height: e[1].y - e[0].y
                      };
                      break;
                  case "polygon":
                      t.points.forEach(function(e) {
                          var t = e.x[0] * (e.x[1] ? n.width: 1),
                          e = e.y[0] * (e.y[1] ? n.height: 1);
                          i ? (t < i.left && (i.left = t), t > i.right && (i.right = t), e < i.top && (i.top = e), e > i.bottom && (i.bottom = e)) : i = {
                              left: t,
                              right: t,
                              top: e,
                              bottom: e
                          },
                          o ? S.pathListRel.push([o, {
                              x: t,
                              y: e
                          }]) : S.pathListRel = [],
                          o = {
                              x: t,
                              y: e
                          }
                      }),
                      S.pathListRel.push([]),
                      e = S.strokeWidth / 2,
                      e = [{
                          x: i.left - e,
                          y: i.top - e
                      },
                      {
                          x: i.right + e,
                          y: i.bottom + e
                      }],
                      S.bBoxRel = {
                          left: e[0].x,
                          top: e[0].y,
                          right: e[1].x,
                          bottom: e[1].y,
                          width: e[1].x - e[0].x,
                          height: e[1].y - e[0].y
                      }
                  }
                  v.pathListRel = v.bBoxRel = !0
              }
              return (v.pathListRel || v.elementLeft || v.elementTop) && (S.pathData = Be(S.pathListRel,
              function(e) {
                  e.x += n.left,
                  e.y += n.top
              })),
              Xe(t, g, "strokeWidth", a = S.strokeWidth) && (t.path.style.strokeWidth = a + "px"),
              Fe(a = S.pathData, g.pathData) && (t.path.setPathData(a), g.pathData = a, v.pathData = !0),
              t.dash && (!v.pathData && (!v.strokeWidth || t.dashLen && t.dashGap) || (S.dashLen = t.dashLen || 2 * S.strokeWidth, S.dashGap = t.dashGap || S.strokeWidth), v.dash = Xe(t, g, "dashLen", S.dashLen) || v.dash, v.dash = Xe(t, g, "dashGap", S.dashGap) || v.dash, v.dash && (t.path.style.strokeDasharray = g.dashLen + "," + g.dashGap)),
              d = S.viewBoxBBox,
              f = g.viewBoxBBox,
              y = t.svg.viewBox.baseVal,
              m = t.svg.style,
              d.x = S.bBoxRel.left + n.left,
              d.y = S.bBoxRel.top + n.top,
              d.width = S.bBoxRel.width,
              d.height = S.bBoxRel.height,
              ["x", "y", "width", "height"].forEach(function(e) { (a = d[e]) !== f[e] && (y[e] = f[e] = a, m[Q[e]] = a + ("x" === e || "y" === e ? t.bodyOffset[e] : 0) + "px")
              }),
              v.strokeWidth || v.pathListRel || v.bBoxRel
          }
      },
      mouseHoverAnchor: {
          type: "anchor",
          argOptions: [{
              optionName: "element",
              type: Me
          },
          {
              optionName: "showEffectName",
              type: "string"
          }],
          style: {
              backgroundImage: "url('data:image/svg+xml;charset=utf-8;base64,PHN2ZyB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0Ij48cG9seWdvbiBwb2ludHM9IjI0LDAgMCw4IDgsMTEgMCwxOSA1LDI0IDEzLDE2IDE2LDI0IiBmaWxsPSJjb3JhbCIvPjwvc3ZnPg==')",
              backgroundSize: "",
              backgroundRepeat: "no-repeat",
              backgroundColor: "#f8f881",
              cursor: "default"
          },
          hoverStyle: {
              backgroundImage: "none",
              backgroundColor: "#fadf8f"
          },
          padding: {
              top: 1,
              right: 15,
              bottom: 1,
              left: 2
          },
          minHeight: 15,
          backgroundPosition: {
              right: 2,
              top: 2
          },
          backgroundSize: {
              width: 12,
              height: 12
          },
          dirKeys: [["top", "Top"], ["right", "Right"], ["bottom", "Bottom"], ["left", "Left"]],
          init: function(a, i) {
              var n, t, e, o, l, r, s, u, h, p = O.mouseHoverAnchor,
              c = {};
              if (a.element = O.pointAnchor.checkElement(i.element), s = a.element, !((u = s.ownerDocument) && (h = u.defaultView) && h.HTMLElement && s instanceof h.HTMLElement)) throw new Error("`element` must be HTML element");
              return p.style.backgroundSize = p.backgroundSize.width + "px " + p.backgroundSize.height + "px",
              ["style", "hoverStyle"].forEach(function(e) {
                  var n = p[e];
                  a[e] = Object.keys(n).reduce(function(e, t) {
                      return e[t] = n[t],
                      e
                  },
                  {})
              }),
              "inline" === (n = a.element.ownerDocument.defaultView.getComputedStyle(a.element, "")).display ? a.style.display = "inline-block": "none" === n.display && (a.style.display = "block"),
              O.mouseHoverAnchor.dirKeys.forEach(function(e) {
                  var t = e[0],
                  e = "padding" + e[1];
                  parseFloat(n[e]) < p.padding[t] && (a.style[e] = p.padding[t] + "px")
              }),
              a.style.display && (e = a.element.style.display, a.element.style.display = a.style.display),
              O.mouseHoverAnchor.dirKeys.forEach(function(e) {
                  e = "padding" + e[1];
                  a.style[e] && (c[e] = a.element.style[e], a.element.style[e] = a.style[e])
              }),
              (s = a.element.getBoundingClientRect()).height < p.minHeight && (ie ? (h = p.minHeight, "content-box" === n.boxSizing ? h -= parseFloat(n.borderTopWidth) + parseFloat(n.borderBottomWidth) + parseFloat(n.paddingTop) + parseFloat(n.paddingBottom) : "padding-box" === n.boxSizing && (h -= parseFloat(n.borderTopWidth) + parseFloat(n.borderBottomWidth)), a.style.height = h + "px") : a.style.height = parseFloat(n.height) + (p.minHeight - s.height) + "px"),
              a.style.backgroundPosition = re ? s.width - p.backgroundSize.width - p.backgroundPosition.right + "px " + p.backgroundPosition.top + "px": "right " + p.backgroundPosition.right + "px top " + p.backgroundPosition.top + "px",
              a.style.display && (a.element.style.display = e),
              O.mouseHoverAnchor.dirKeys.forEach(function(e) {
                  e = "padding" + e[1];
                  a.style[e] && (a.element.style[e] = c[e])
              }),
              ["style", "hoverStyle"].forEach(function(e) {
                  var t = a[e],
                  n = i[e];
                  he(n) && Object.keys(n).forEach(function(e) {
                      "string" == typeof n[e] || pe(n[e]) ? t[e] = n[e] : null == n[e] && delete t[e]
                  })
              }),
              "function" == typeof i.onSwitch && (r = i.onSwitch),
              i.showEffectName && w[i.showEffectName] && (a.showEffectName = o = i.showEffectName),
              l = i.animOptions,
              a.elmStyle = t = a.element.style,
              a.mouseenter = function(e) {
                  a.hoverStyleSave = p.getStyles(t, Object.keys(a.hoverStyle)),
                  p.setStyles(t, a.hoverStyle),
                  a.boundTargets.forEach(function(e) {
                      tt(e.props, !0, o, l)
                  }),
                  r && r(e)
              },
              a.mouseleave = function(e) {
                  p.setStyles(t, a.hoverStyleSave),
                  a.boundTargets.forEach(function(e) {
                      tt(e.props, !1, o, l)
                  }),
                  r && r(e)
              },
              !0
          },
          bind: function(e, t) {
              var n, a, i, o, l;
              return t.props.svg ? O.mouseHoverAnchor.llShow(t.props, !1, e.showEffectName) : ze(function() {
                  O.mouseHoverAnchor.llShow(t.props, !1, e.showEffectName)
              }),
              e.enabled || (e.styleSave = O.mouseHoverAnchor.getStyles(e.elmStyle, Object.keys(e.style)), O.mouseHoverAnchor.setStyles(e.elmStyle, e.style), e.removeEventListener = (n = e.element, a = e.mouseenter, i = e.mouseleave, "onmouseenter" in n && "onmouseleave" in n ? (n.addEventListener("mouseenter", a, !1), n.addEventListener("mouseleave", i, !1),
              function() {
                  n.removeEventListener("mouseenter", a, !1),
                  n.removeEventListener("mouseleave", i, !1)
              }) : (console.warn("mouseenter and mouseleave events polyfill is enabled."), n.addEventListener("mouseover", o = function(e) {
                  e.relatedTarget && (e.relatedTarget === this || this.compareDocumentPosition(e.relatedTarget) & Node.DOCUMENT_POSITION_CONTAINED_BY) || a.apply(this, arguments)
              }), n.addEventListener("mouseout", l = function(e) {
                  e.relatedTarget && (e.relatedTarget === this || this.compareDocumentPosition(e.relatedTarget) & Node.DOCUMENT_POSITION_CONTAINED_BY) || i.apply(this, arguments)
              }),
              function() {
                  n.removeEventListener("mouseover", o, !1),
                  n.removeEventListener("mouseout", l, !1)
              })), e.enabled = !0),
              !0
          },
          unbind: function(e, t) {
              e.enabled && e.boundTargets.length <= 1 && (e.removeEventListener(), O.mouseHoverAnchor.setStyles(e.elmStyle, e.styleSave), e.enabled = !1),
              O.mouseHoverAnchor.llShow(t.props, !0, e.showEffectName)
          },
          removeOption: function(e, t) {
              O.pointAnchor.removeOption(e, t)
          },
          remove: function(t) {
              t.boundTargets.length && (console.error("LeaderLineAttachment was not unbound by remove"), t.boundTargets.forEach(function(e) {
                  O.mouseHoverAnchor.unbind(t, e)
              }))
          },
          getBBoxNest: function(e, t) {
              return Le(e.element, t.baseWindow)
          },
          llShow: function(e, t, n) {
              w[n || e.curStats.show_effect].stop(e, !0, t),
              e.aplStats.show_on = t
          },
          getStyles: function(n, e) {
              return e.reduce(function(e, t) {
                  return e[t] = n[t],
                  e
              },
              {})
          },
          setStyles: function(t, n) {
              Object.keys(n).forEach(function(e) {
                  t[e] = n[e]
              })
          }
      },
      captionLabel: {
          type: "label",
          argOptions: [{
              optionName: "text",
              type: "string"
          }],
          stats: {
              color: {},
              x: {},
              y: {}
          },
          textStyleProps: ["fontFamily", "fontStyle", "fontVariant", "fontWeight", "fontStretch", "fontSize", "fontSizeAdjust", "kerning", "letterSpacing", "wordSpacing", "textDecoration"],
          init: function(l, t) {
              return "string" == typeof t.text && (l.text = t.text.trim()),
              !!l.text && ("string" == typeof t.color && (l.color = t.color.trim()), l.outlineColor = "string" == typeof t.outlineColor ? t.outlineColor.trim() : "#fff", Array.isArray(t.offset) && pe(t.offset[0]) && pe(t.offset[1]) && (l.offset = {
                  x: t.offset[0],
                  y: t.offset[1]
              }), pe(t.lineOffset) && (l.lineOffset = t.lineOffset), O.captionLabel.textStyleProps.forEach(function(e) {
                  null != t[e] && (l[e] = t[e])
              }), l.updateColor = function(e) {
                  O.captionLabel.updateColor(l, e)
              },
              l.updateSocketXY = function(e) {
                  var t, n = l.curStats,
                  a = l.aplStats,
                  i = e.curStats,
                  o = i.position_socketXYSE[l.socketIndex];
                  null != o.x && (l.offset ? (n.x = o.x + l.offset.x, n.y = o.y + l.offset.y) : (t = l.height / 2, e = Math.max(i.attach_plugSideLenSE[l.socketIndex] || 0, i.line_strokeWidth / 2), i = i.position_socketXYSE[l.socketIndex ? 0 : 1], o.socketId === A || o.socketId === k ? (n.x = o.socketId === A ? o.x - t - l.width: o.x + t, n.y = i.y < o.y ? o.y + e + t: o.y - e - t - l.height) : (n.x = i.x < o.x ? o.x + e + t: o.x - e - t - l.width, n.y = o.socketId === b ? o.y - t - l.height: o.y + t)), Xe(l, a, "x", t = n.x) && (l.elmPosition.x.baseVal.getItem(0).value = t), Xe(l, a, "y", t = n.y) && (l.elmPosition.y.baseVal.getItem(0).value = t + l.height))
              },
              l.updatePath = function(e) {
                  var t = l.curStats,
                  n = l.aplStats,
                  e = e.pathList.animVal || e.pathList.baseVal;
                  e && (e = O.captionLabel.getMidPoint(e, l.lineOffset), t.x = e.x - l.width / 2, t.y = e.y - l.height / 2, Xe(l, n, "x", e = t.x) && (l.elmPosition.x.baseVal.getItem(0).value = e), Xe(l, n, "y", e = t.y) && (l.elmPosition.y.baseVal.getItem(0).value = e + l.height))
              },
              l.updateShow = function(e) {
                  O.captionLabel.updateShow(l, e)
              },
              re && (l.adjustEdge = function(e, t) {
                  var n = l.curStats;
                  null != n.x && O.captionLabel.adjustEdge(t, {
                      x: n.x,
                      y: n.y,
                      width: l.width,
                      height: l.height
                  },
                  l.strokeWidth / 2)
              }), !0)
          },
          updateColor: function(e, t) {
              var n = e.curStats,
              a = e.aplStats,
              t = t.curStats;
              n.color = t = e.color || t.line_color,
              Xe(e, a, "color", t) && (e.styleFill.fill = t)
          },
          updateShow: function(e, t) {
              t = !0 === t.isShown;
              t !== e.isShown && (e.styleShow.visibility = t ? "": "hidden", e.isShown = t)
          },
          adjustEdge: function(e, t, n) {
              n = {
                  x1: t.x - n,
                  y1: t.y - n,
                  x2: t.x + t.width + n,
                  y2: t.y + t.height + n
              };
              n.x1 < e.x1 && (e.x1 = n.x1),
              n.y1 < e.y1 && (e.y1 = n.y1),
              n.x2 > e.x2 && (e.x2 = n.x2),
              n.y2 > e.y2 && (e.y2 = n.y2)
          },
          newText: function(e, t, n, a, i) {
              var o, l, r = t.createElementNS(ae, "text");
              return r.textContent = e,
              [r.x, r.y].forEach(function(e) {
                  var t = n.createSVGLength();
                  t.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX, 0),
                  e.baseVal.initialize(t)
              }),
              "boolean" != typeof h && (h = "paintOrder" in r.style),
              i && !h ? (o = t.createElementNS(ae, "defs"), r.id = a, o.appendChild(r), (l = (e = t.createElementNS(ae, "g")).appendChild(t.createElementNS(ae, "use"))).href.baseVal = "#" + a, (t = e.appendChild(t.createElementNS(ae, "use"))).href.baseVal = "#" + a, (l = l.style).strokeLinejoin = "round", {
                  elmPosition: r,
                  styleText: r.style,
                  styleFill: t.style,
                  styleStroke: l,
                  styleShow: e.style,
                  elmsAppend: [o, e]
              }) : (l = r.style, i && (l.strokeLinejoin = "round", l.paintOrder = "stroke"), {
                  elmPosition: r,
                  styleText: l,
                  styleFill: l,
                  styleStroke: i ? l: null,
                  styleShow: l,
                  elmsAppend: [r]
              })
          },
          getMidPoint: function(e, t) {
              var n, a, i = Re(e),
              o = i.segsLen,
              i = i.lenAll,
              l = -1,
              r = i / 2 + (t || 0);
              if (r <= 0) return 2 === (n = e[0]).length ? Ve(n[0], n[1], 0) : Ne(n[0], n[1], n[2], n[3], 0);
              if (i <= r) return 2 === (n = e[e.length - 1]).length ? Ve(n[0], n[1], 1) : Ne(n[0], n[1], n[2], n[3], 1);
              for (a = []; r > o[++l];) a.push(e[l]),
              r -= o[l];
              return 2 === (n = e[l]).length ? Ve(n[0], n[1], r / o[l]) : Ne(n[0], n[1], n[2], n[3], We(n[0], n[1], n[2], n[3], r))
          },
          initSvg: function(t, n) {
              var e, a, i = O.captionLabel.newText(t.text, n.baseWindow.document, n.svg, C + "-captionLabel-" + t._id, t.outlineColor); ["elmPosition", "styleFill", "styleShow", "elmsAppend"].forEach(function(e) {
                  t[e] = i[e]
              }),
              t.isShown = !1,
              t.styleShow.visibility = "hidden",
              O.captionLabel.textStyleProps.forEach(function(e) {
                  null != t[e] && (i.styleText[e] = t[e])
              }),
              i.elmsAppend.forEach(function(e) {
                  n.svg.appendChild(e)
              }),
              e = i.elmPosition.getBBox(),
              t.width = e.width,
              t.height = e.height,
              t.outlineColor && (a = e.height / 9, i.styleStroke.strokeWidth = (a = 10 < a ? 10 : a < 2 ? 2 : a) + "px", i.styleStroke.stroke = t.outlineColor),
              t.strokeWidth = a || 0,
              Ye(t.aplStats, O.captionLabel.stats),
              t.updateColor(n),
              t.refSocketXY ? t.updateSocketXY(n) : t.updatePath(n),
              re && $e(n, {}),
              t.updateShow(n)
          },
          bind: function(e, t) {
              var n = t.props;
              return e.color || Ge(n, "cur_line_color", e.updateColor),
              (e.refSocketXY = "startLabel" === t.optionName || "endLabel" === t.optionName) ? (e.socketIndex = "startLabel" === t.optionName ? 0 : 1, Ge(n, "apl_position", e.updateSocketXY), e.offset || (Ge(n, "cur_attach_plugSideLenSE", e.updateSocketXY), Ge(n, "cur_line_strokeWidth", e.updateSocketXY))) : Ge(n, "apl_path", e.updatePath),
              Ge(n, "svgShow", e.updateShow),
              re && Ge(n, "new_edge4viewBox", e.adjustEdge),
              O.captionLabel.initSvg(e, n),
              !0
          },
          unbind: function(e, t) {
              var n = t.props;
              e.elmsAppend && (e.elmsAppend.forEach(function(e) {
                  n.svg.removeChild(e)
              }), e.elmPosition = e.styleFill = e.styleShow = e.elmsAppend = null),
              Ye(e.curStats, O.captionLabel.stats),
              Ye(e.aplStats, O.captionLabel.stats),
              e.color || De(n, "cur_line_color", e.updateColor),
              e.refSocketXY ? (De(n, "apl_position", e.updateSocketXY), e.offset || (De(n, "cur_attach_plugSideLenSE", e.updateSocketXY), De(n, "cur_line_strokeWidth", e.updateSocketXY))) : De(n, "apl_path", e.updatePath),
              De(n, "svgShow", e.updateShow),
              re && (De(n, "new_edge4viewBox", e.adjustEdge), $e(n, {}))
          },
          removeOption: function(e, t) {
              var n = t.props,
              a = {};
              a[t.optionName] = "",
              it(n, a)
          },
          remove: function(t) {
              t.boundTargets.length && (console.error("LeaderLineAttachment was not unbound by remove"), t.boundTargets.forEach(function(e) {
                  O.captionLabel.unbind(t, e)
              }))
          }
      },
      pathLabel: {
          type: "label",
          argOptions: [{
              optionName: "text",
              type: "string"
          }],
          stats: {
              color: {},
              startOffset: {},
              pathData: {}
          },
          init: function(l, t) {
              return "string" == typeof t.text && (l.text = t.text.trim()),
              !!l.text && ("string" == typeof t.color && (l.color = t.color.trim()), l.outlineColor = "string" == typeof t.outlineColor ? t.outlineColor.trim() : "#fff", pe(t.lineOffset) && (l.lineOffset = t.lineOffset), O.captionLabel.textStyleProps.forEach(function(e) {
                  null != t[e] && (l[e] = t[e])
              }), l.updateColor = function(e) {
                  O.captionLabel.updateColor(l, e)
              },
              l.updatePath = function(e) {
                  var t = l.curStats,
                  n = l.aplStats,
                  a = e.curStats,
                  i = e.pathList.animVal || e.pathList.baseVal;
                  i && (t.pathData = a = O.pathLabel.getOffsetPathData(i, a.line_strokeWidth / 2 + l.strokeWidth / 2 + l.height / 4, 1.25 * l.height), Fe(a, n.pathData) && (l.elmPath.setPathData(a), n.pathData = a, l.bBox = l.elmPosition.getBBox(), l.updateStartOffset(e)))
              },
              l.updateStartOffset = function(e) {
                  var i, t, n = l.curStats,
                  a = l.aplStats,
                  o = e.curStats;
                  n.pathData && (2 === l.semIndex && !l.lineOffset || (t = n.pathData.reduce(function(e, t) {
                      var n, a = t.values;
                      switch (t.type) {
                      case "M":
                          i = {
                              x: a[0],
                              y: a[1]
                          };
                          break;
                      case "L":
                          n = {
                              x: a[0],
                              y: a[1]
                          },
                          i && (e += Ae(i, n)),
                          i = n;
                          break;
                      case "C":
                          n = {
                              x: a[4],
                              y: a[5]
                          },
                          i && (e += Te(i, {
                              x: a[0],
                              y: a[1]
                          },
                          {
                              x: a[2],
                              y: a[3]
                          },
                          n)),
                          i = n
                      }
                      return e
                  },
                  0), e = 0 === l.semIndex ? 0 : 1 === l.semIndex ? t: t / 2, 2 !== l.semIndex && (o = Math.max(o.attach_plugBackLenSE[l.semIndex] || 0, o.line_strokeWidth / 2) + l.strokeWidth / 2 + l.height / 4, e = (e += 0 === l.semIndex ? o: -o) < 0 ? 0 : t < e ? t: e), l.lineOffset && (e = (e += l.lineOffset) < 0 ? 0 : t < e ? t: e), n.startOffset = e, Xe(l, a, "startOffset", e) && (l.elmOffset.startOffset.baseVal.value = e)))
              },
              l.updateShow = function(e) {
                  O.captionLabel.updateShow(l, e)
              },
              re && (l.adjustEdge = function(e, t) {
                  l.bBox && O.captionLabel.adjustEdge(t, l.bBox, l.strokeWidth / 2)
              }), !0)
          },
          getOffsetPathData: function(e, c, n) {
              var d, a, f = [];
              function y(e, t) {
                  return Math.abs(e.x - t.x) < 3 && Math.abs(e.y - t.y) < 3
              }
              return e.forEach(function(e) {
                  var t, n, a, i, o, l, r, s, u, h, p;
                  2 === e.length ? (s = e[0], u = e[1], h = c, p = Math.atan2(s.y - u.y, u.x - s.x) + .5 * Math.PI, t = [{
                      x: s.x + Math.cos(p) * h,
                      y: s.y + Math.sin(p) * h * -1
                  },
                  {
                      x: u.x + Math.cos(p) * h,
                      y: u.y + Math.sin(p) * h * -1
                  }], d ? (a = d.points, 0 <= (r = Math.atan2(a[1].y - a[0].y, a[0].x - a[1].x) - Math.atan2(e[0].y - e[1].y, e[1].x - e[0].x)) && r <= Math.PI ? n = {
                      type: "line",
                      points: t,
                      inside: !0
                  }: (o = Pe(a[0], a[1], c), i = Pe(t[1], t[0], c), l = a[0], s = t[1], p = (u = o).x - l.x, h = u.y - l.y, r = s.x - i.x, u = s.y - i.y, s = ( - h * (l.x - i.x) + p * (l.y - i.y)) / ( - r * h + p * u), u = (r * (l.y - i.y) - u * (l.x - i.x)) / ( - r * h + p * u), n = (h = 0 <= s && s <= 1 && 0 <= u && u <= 1 ? {
                      x: l.x + u * p,
                      y: l.y + u * h
                  }: null) ? {
                      type: "line",
                      points: [a[1] = h, t[1]]
                  }: (a[1] = y(i, o) ? i: o, {
                      type: "line",
                      points: [i, t[1]]
                  }), d.len = Ae(a[0], a[1]))) : n = {
                      type: "line",
                      points: t
                  },
                  n.len = Ae(n.points[0], n.points[1]), f.push(d = n)) : (f.push({
                      type: "cubic",
                      points: function(e, t, n, a, i, o) {
                          for (var l, r, s = Te(e, t, n, a) / o, u = 1 / (o < i ? i / o * s: s), h = [], p = 0; r = (90 - (l = Ne(e, t, n, a, p)).angle) * (Math.PI / 180), h.push({
                              x: l.x + Math.cos(r) * i,
                              y: l.y + Math.sin(r) * i * -1
                          }), !(1 <= p);) 1 < (p += u) && (p = 1);
                          return h
                      } (e[0], e[1], e[2], e[3], c, 16)
                  }), d = null)
              }),
              d = null,
              f.forEach(function(e) {
                  var t;
                  d = "line" === e.type ? (e.inside && (d.len > c ? ((t = d.points)[1] = Pe(t[0], t[1], -c), d.len = Ae(t[0], t[1])) : (d.points = null, d.len = 0), e.len > c + n ? ((t = e.points)[0] = Pe(t[1], t[0], -(c + n)), e.len = Ae(t[0], t[1])) : (e.points = null, e.len = 0)), e) : null
              }),
              f.reduce(function(t, e) {
                  var n = e.points;
                  return n && (a && y(n[0], a) || t.push({
                      type: "M",
                      values: [n[0].x, n[0].y]
                  }), "line" === e.type ? t.push({
                      type: "L",
                      values: [n[1].x, n[1].y]
                  }) : (n.shift(), n.forEach(function(e) {
                      t.push({
                          type: "L",
                          values: [e.x, e.y]
                      })
                  })), a = n[n.length - 1]),
                  t
              },
              [])
          },
          newText: function(e, t, n, a) {
              var i, o, l, r, s = t.createElementNS(ae, "defs"),
              u = s.appendChild(t.createElementNS(ae, "path"));
              return u.id = i = n + "-path",
              (l = (o = t.createElementNS(ae, "text")).appendChild(t.createElementNS(ae, "textPath"))).href.baseVal = "#" + i,
              l.startOffset.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PX, 0),
              l.textContent = e,
              "boolean" != typeof h && (h = "paintOrder" in o.style),
              a && !h ? (o.id = e = n + "-text", s.appendChild(o), (r = (n = t.createElementNS(ae, "g")).appendChild(t.createElementNS(ae, "use"))).href.baseVal = "#" + e, (t = n.appendChild(t.createElementNS(ae, "use"))).href.baseVal = "#" + e, (r = r.style).strokeLinejoin = "round", {
                  elmPosition: o,
                  elmPath: u,
                  elmOffset: l,
                  styleText: o.style,
                  styleFill: t.style,
                  styleStroke: r,
                  styleShow: n.style,
                  elmsAppend: [s, n]
              }) : (r = o.style, a && (r.strokeLinejoin = "round", r.paintOrder = "stroke"), {
                  elmPosition: o,
                  elmPath: u,
                  elmOffset: l,
                  styleText: r,
                  styleFill: r,
                  styleStroke: a ? r: null,
                  styleShow: r,
                  elmsAppend: [s, o]
              })
          },
          initSvg: function(t, n) {
              var e, a, i, o = O.pathLabel.newText(t.text, n.baseWindow.document, C + "-pathLabel-" + t._id, t.outlineColor); ["elmPosition", "elmPath", "elmOffset", "styleFill", "styleShow", "elmsAppend"].forEach(function(e) {
                  t[e] = o[e]
              }),
              t.isShown = !1,
              t.styleShow.visibility = "hidden",
              O.captionLabel.textStyleProps.forEach(function(e) {
                  null != t[e] && (o.styleText[e] = t[e])
              }),
              o.elmsAppend.forEach(function(e) {
                  n.svg.appendChild(e)
              }),
              o.elmPath.setPathData([{
                  type: "M",
                  values: [0, 100]
              },
              {
                  type: "h",
                  values: [100]
              }]),
              le && (i = o.elmOffset.href.baseVal, o.elmOffset.href.baseVal = ""),
              e = o.elmPosition.getBBox(),
              le && (o.elmOffset.href.baseVal = i),
              o.styleText.textAnchor = ["start", "end", "middle"][t.semIndex],
              2 !== t.semIndex || t.lineOffset || o.elmOffset.startOffset.baseVal.newValueSpecifiedUnits(SVGLength.SVG_LENGTHTYPE_PERCENTAGE, 50),
              t.height = e.height,
              t.outlineColor && (a = e.height / 9, o.styleStroke.strokeWidth = (a = 10 < a ? 10 : a < 2 ? 2 : a) + "px", o.styleStroke.stroke = t.outlineColor),
              t.strokeWidth = a || 0,
              Ye(t.aplStats, O.pathLabel.stats),
              t.updateColor(n),
              t.updatePath(n),
              t.updateStartOffset(n),
              re && $e(n, {}),
              t.updateShow(n)
          },
          bind: function(e, t) {
              var n = t.props;
              return e.color || Ge(n, "cur_line_color", e.updateColor),
              Ge(n, "cur_line_strokeWidth", e.updatePath),
              Ge(n, "apl_path", e.updatePath),
              e.semIndex = "startLabel" === t.optionName ? 0 : "endLabel" === t.optionName ? 1 : 2,
              2 === e.semIndex && !e.lineOffset || Ge(n, "cur_attach_plugBackLenSE", e.updateStartOffset),
              Ge(n, "svgShow", e.updateShow),
              re && Ge(n, "new_edge4viewBox", e.adjustEdge),
              O.pathLabel.initSvg(e, n),
              !0
          },
          unbind: function(e, t) {
              var n = t.props;
              e.elmsAppend && (e.elmsAppend.forEach(function(e) {
                  n.svg.removeChild(e)
              }), e.elmPosition = e.elmPath = e.elmOffset = e.styleFill = e.styleShow = e.elmsAppend = null),
              Ye(e.curStats, O.pathLabel.stats),
              Ye(e.aplStats, O.pathLabel.stats),
              e.color || De(n, "cur_line_color", e.updateColor),
              De(n, "cur_line_strokeWidth", e.updatePath),
              De(n, "apl_path", e.updatePath),
              2 === e.semIndex && !e.lineOffset || De(n, "cur_attach_plugBackLenSE", e.updateStartOffset),
              De(n, "svgShow", e.updateShow),
              re && (De(n, "new_edge4viewBox", e.adjustEdge), $e(n, {}))
          },
          removeOption: function(e, t) {
              var n = t.props,
              a = {};
              a[t.optionName] = "",
              it(n, a)
          },
          remove: function(t) {
              t.boundTargets.length && (console.error("LeaderLineAttachment was not unbound by remove"), t.boundTargets.forEach(function(e) {
                  O.pathLabel.unbind(t, e)
              }))
          }
      }
  },
  Object.keys(O).forEach(function(e) {
      ot[e] = function() {
          return new M(O[e], Array.prototype.slice.call(arguments))
      }
  }),
  ot.positionByWindowResize = !0,
  window.addEventListener("resize", S.add(function() {
      ot.positionByWindowResize && Object.keys(Se).forEach(function(e) {
        console.log(111111111, Se[e])
          $e(Se[e], {
              position: !0
          })
      })
  }), !1),
  ot
} ();
export
default LeaderLine
